Passport.js成功的身份验证根本没有调用

Passport.js successful authentication not calling at all

本文关键字:调用 身份验证 js 成功 Passport      更新时间:2023-09-26

这是我的代码:

passport.use(new localStrategy(
    function(username, password, done) {
        User.findOne({
            username: username
        }, function(err, user) {
            if (err) throw err;
            if (!user) {
                console.log("Unknown User");
                return done(null, false, {
                    message: "Unknown User"
                })
            }
            if (!user.validPassword(password)) {
                console.log("Incorrect password.", password);
                return done(null, false, {
                    message: 'Incorrect password.'
                });
            }
            console.log("User Is detected");
            return done(null, user, {
                message: "User Is detected"
            })
        });
    }
));

router.post('/login',
    passport.authenticate('local', {
        successRedirect: '/',
        failureRedirect: '/users/login',
        failureFlash: true,
        successFlash: 'Welcome!'
    }),
    function(req, res) { // this function not called
        console.log(req)
    });

一切都很好,但成功函数没有调用,我想在登录后收到这样的消息:"welcome"+req.body.username

有什么建议吗?thx

来自passport.authenticate():的文档

重定向选项覆盖默认行为

在您的示例中,因为您设置了successRedirect选项,所以在成功进行身份验证时不会调用中间件链中的下一个函数。

如果你想在重定向到'/'之前调用你的函数,那么你应该:

router.post('/login',
    passport.authenticate('local', {
        failureRedirect: '/users/login',
        failureFlash: true
    }),
    function(req, res) {
        // This should show up in your logs:
        console.log('Welcome ' + req.body.username);
        // You can also use a flash to consume after redirect:
        // (provided that you use connect-flash in your app)
        req.flash('info', 'Welcome ' + req.body.username);
        res.redirect('/');
    }
);