gpt4 book ai didi

javascript - 如何在现有的 Node.js Express 设置中集成灵活的速率限制器?

转载 作者:行者123 更新时间:2023-12-02 22:18:25 27 4
gpt4 key购买 nike

我使用node.js、passport 和 jwt 不记名 token 来保护我的路由。我还没有的是速率限制和阻止 ip/用户(如果错误尝试次数过多)。为我的设置实现它的最佳方法是什么?

我想尝试一下灵活的速率限制器。但我怎样才能整合,例如此处的登录示例:https://github.com/animir/node-rate-limiter-flexible/wiki/Overall-example#login-endpoint-protection在我下面的设置中?

helpers/rateLimiter.js

const express = require('express');
const redis = require('redis');
const { RateLimiterRedis } = require('rate-limiter-flexible');

/* What goes here? Example https://github.com/animir/node-rate-limiter-flexible/wiki/Overall-example#login-endpoint-protection doesn't seem to apply */

这些是我的路线:

路线/index.js

const express = require('express');
const router = require('express-promise-router')();
const passport = require('passport');
const passLogin = passport.authenticate('local-login', { session: false, failWithError: true });
const { rateLimiter } = require('../helpers/rateLimiter');
...

router.route('/v1/login')
.post( rateLimiter, passLogin, function(err, req, res, next) {
return res.status(401).send({ status: 401, success: false })
}, controller.login );

router.route('/v1/abc/search')
.post( passJWT_ABC, function(err, req, res, next) {
return res.status(401).send({ status: 401, success: false })
}, controller.search );

最佳答案

在这种情况下,您应该导出中间件。

const express = require('express');
const redis = require('redis');
const { RateLimiterRedis } = require('rate-limiter-flexible');

async function loginRoute(req, res) {
// code from example https://github.com/animir/node-rate-limiter-flexible/wiki/Overall-example#login-endpoint-protection
}

export default async (req, res, next) => {
try {
await loginRoute(req, res);
next();
} catch (err) {
res.status(500).end();
}
}

然后您应该注意 authorise()user.isLoggedInuser.exists 检查如何与您的应用程序登录方法配合使用.

有一个护照本地的示例,应该对您也有用 https://github.com/passport/express-4.x-local-example/blob/67e0f735fc6d2088d7aa9b8c4eb25bc0052653ec/server-secure.js

关于javascript - 如何在现有的 Node.js Express 设置中集成灵活的速率限制器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59313043/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com