大家好,我正在使用nodejs和expressjs进行双向身份验证。在我的网站中,您必须先登录。如果登录成功,用户将收到一封电子邮件,其中包含密钥和必须粘贴该密钥的链接。如果用户打开该链接并粘贴该密钥,我希望用户登录。但是当我在我的代码中调用passport.authenticate()函数时,用户当前没有登录。该方法成功重定向到用户页面,这意味着登录成功但仍然没有用户登录。
router.post('/loginTwo/:token', function(req, res) {
async.waterfall([
function(done) {
User.findOne({ twoWayAuthentication: req.params.token, authenticationExpires: { $gt: Date.now() } }, function(err, user) {
if (!user) {
req.flash('error', 'password-token has expired');
return res.redirect('back');
}
if (user.twoWayAuthenticationPassword == req.body.twoWayAuthenticationPassword) {
user.twoWayAuthenticationPassword = undefined
user.twoWayAuthentication = undefined;
user.authenticationExpires = undefined;
console.log(reqlogin.body);
console.log(req.body);
user.save(function(err) {
passport.authenticate('local', {
successRedirect: '/users/',
failureRedirect: '/',
failureFlash : true
})(reqlogin, res);
done(err, user);
});
}
});
}
]); });
正如我所说的成功重定向:'用户'被调用,但当我检查用户是否登录时,它显示他不是。在我的函数router.post(' login')中,我检查用户名和密码是否与用户在req.body.username和req.body.password中编写的数据匹配。如果我在那里调用函数passport.authenticate函数,则用户已成功登录,因为该函数的req包含用户的用户名和密码。所以我将函数的req保存在一个名为reqLogin的变量中,并将其传递给router.post中的passport.authenticate()函数(' / loginTwo /:token' ....)。函数loginTwo的req只包含一个标记,这就是为什么当我尝试用它来调用passport.authenticate()时它显示错误。