我正在使用Node.js v8.7.0开发后端,身份验证方面我使用了Passport和Local Passport,我之前用过这个并且一切顺利,但现在我不知道问题出在哪里了,以下是我的代码:
我的策略:
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)
})
}
))
这里是调用发生的地方:
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
})
}
})
问题在于我没有得到像console.log或错误信息那样的任何消息,它没有执行passport.authenticate的回调函数...顺便说一下,像注册新用户之类的所有事情都很顺利。
router.post
中的所有护照代码,并按照我上面提到的方式包含它。我会附上完整的代码。 - dzmpassport.authenticate
的末尾传递(req,res,next)
来执行该函数。 - dzm