如何在现有 node.js 快速设置中集成 rate-limiter-flexible?
How to integrate rate-limiter-flexible in existing node.js express setup?
我使用 node.js、护照和 jwt 不记名令牌来保护我的路线。如果错误尝试太多,我还没有的是 ip/user 的速率限制和阻塞。为我的设置实施它的最佳方式是什么?
我想尝试使用 rate-limiter-flexible。但是我怎样才能整合例如来自此处的登录示例: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 */
这些是我的路线:
routes/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.isLoggedIn
和 user.exists
检查如何与您的应用程序登录方法一起工作。
有一个 passport-local 的例子,应该对你也有用 https://github.com/passport/express-4.x-local-example/blob/67e0f735fc6d2088d7aa9b8c4eb25bc0052653ec/server-secure.js
我使用 node.js、护照和 jwt 不记名令牌来保护我的路线。如果错误尝试太多,我还没有的是 ip/user 的速率限制和阻塞。为我的设置实施它的最佳方式是什么?
我想尝试使用 rate-limiter-flexible。但是我怎样才能整合例如来自此处的登录示例: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 */
这些是我的路线:
routes/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.isLoggedIn
和 user.exists
检查如何与您的应用程序登录方法一起工作。
有一个 passport-local 的例子,应该对你也有用 https://github.com/passport/express-4.x-local-example/blob/67e0f735fc6d2088d7aa9b8c4eb25bc0052653ec/server-secure.js