[我正在编码一个网站,其中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);
}
});
});
任何帮助将不胜感激,谢谢。
我认为您对setTimeout的理解不正确。它的作用是在一定时间后执行功能
实现此行为的一种更好的方法是存储他的第三次尝试的时间戳,并将其与Date.now()进行比较,以检查是否已超过30分钟的禁令期