在node.js中30分钟后有什么方法可以运行查询吗?

问题描述 投票:0回答:1

[我正在编码一个网站,其中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);
        }
    });
});

任何帮助将不胜感激,谢谢。

node.js mongodb express authentication wait
1个回答
0
投票

我认为您对setTimeout的理解不正确。它的作用是在一定时间后执行功能

实现此行为的一种更好的方法是存储他的第三次尝试的时间戳,并将其与Date.now()进行比较,以检查是否已超过30分钟的禁令期

© www.soinside.com 2019 - 2024. All rights reserved.