【发布时间】:2020-05-27 18:32:12
【问题描述】:
我正在编写一个网站,我将在 3 次尝试后禁止用户 30 分钟,但是使用 setTimeout 方法似乎不起作用这是我的代码:
let isOnce = true;
router.post('/login', (req, res, next) => {
const { email, password } = req.body;
User.findOne({ email: email }, (err, user) => {
if (err) {
console.log(err);
}
if (user.savedAttempts < 3) {
passport.authenticate('local', {
successRedirect: '/users/questions',
failureRedirect: '/users/login',
failureFlash: true
})(req, res, next);
attempts += 1;
isOnce = true;
} else {
setTimeout(() => {
if (isOnce == true) {
User.updateOne({ email: email }, { $inc: { savedAttempts: 1 } }, (err, resp) => {
if (err) console.log(err);
});
}
isOnce = false;
res.redirect("/users/login");
}, 1800000);
}
});
});
任何帮助将不胜感激。
【问题讨论】:
-
通过设置
user.bannedUntil = new Date().getTime() + 1800000;来禁止用户并将其保存到数据库可能会更容易。然后当用户尝试登录时检查是否没有被禁止。
标签: node.js mongodb express authentication wait