passport.authenticate回调未被执行

Moh*_*yeb 2 javascript node.js express passport.js

我正在开发一个带有nodejs v8.7.0的后端,用于使用护照和本地护照进行身份验证,我之前使用过这一切,一切顺利,但现在我不知道是什么问题,这是我的代码:

我的策略:

var passport = require('passport')
var LocalStrategy = require('passport-local').Strategy
    passport.use('local', new LocalStrategy({
            usernameField: 'email'
        },
        function (email, password, done) {
            User.findOne({
                email: email,
                is_admin: false
            }, function (err, user) {
                if (err) {
                    return done(err)
                }
                // Return if user not found in database
                if (!user) {
                    return done(null, false, {
                        message: 'User not found'
                    })
                }
                // Return if password is wrong
                if (!user.validPassword(password)) {
                    return done(null, false, {
                        message: 'Password is wrong'
                    })
                }
                // If credentials are correct, return the user object
                return done(null, user)
            })
        }
    ))
Run Code Online (Sandbox Code Playgroud)

这是电话发生的地方:

router.post('/login', (req, res) => {
    try {
        passport.authenticate('local', function (err, user, info) {
            console.log('here xx')

            var token;
            if (err) {
                console.log(err);
                return res.status(401).json(err);
            }
            // If a user is found
            if (user) {
                console.log('here')

                token = user.generateJwt();
                return res.status(200).json({
                    "token": token
                });
            } else {
                // If user is not found
                res.status(401).json(info);
            }
        })

    } catch (reason) {
        res.status(501).json({
            message: reason.message
        })
    }
})
Run Code Online (Sandbox Code Playgroud)

问题是我什么都没有像来自console.log的消息或任何类似错误的消息,它没有执行来自passport.authenticate的回调....顺便说一句,如注册新用户和一切都很好,任何人都可以帮忙吗?

dzm*_*dzm 9

护照应该用作middleware.在您的路线中使用它:

router.post('/login', passport.authenticate('local'), (req, res) => { })

在您的路线内,您将有权访问 req.user

如果您不使用中间件,则可以使用回调.但你需要传入req,res并且next.

例如:

passport.authenticate('local', function (err, user, info) {

})(req, res, next)
Run Code Online (Sandbox Code Playgroud)

这是一个完整的示例,请注意,这不是使用中间件,因为在这种情况下,您要定义自定义消息并需要使用回调来获取信息.

router.post('/login', (req, res) => {
    passport.authenticate('local', function (err, user, info) {      
        if (err) {
            return res.status(401).json(err);
        }
        if (user) {
            const token = user.generateJwt();
            return res.status(200).json({
                "token": token
            });
        } else {
            res.status(401).json(info);
        }
    })(req, res, next)
})
Run Code Online (Sandbox Code Playgroud)