通过nodejs中的电子邮件进行双向身份validation

你好,我正在与nodejs和expressjs进行双向authentication。 在我的网站,你将不得不先login。 如果login成功,用户将收到一封带有密钥和链接的电子邮件,他必须粘贴该密钥。 如果用户打开该链接并粘贴该密钥,我希望用户login。但是,当我在代码中调用passport.authenticate()函数时,用户没有login。 该方法成功redirect到用户页面,这意味着login成功,但仍然没有用户login。

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); }); } }); } 

]); });

正如我所说的successRedirect:“用户”被称为,但当我检查用户是否login,这表明他不是。 在我的函数router.post('login')中,我检查用户名和密码是否与用户在req.body.username和req.body.password中写入的数据匹配。 如果我在那里调用函数passport.authenticate函数,用户login成功,因为该函数的req包含用户的用户名和密码。 所以我把函数的req保存在一个名为reqLogin的variables中,并将其传递给router.post('/ loginTwo /:token'….)中的passport.authenticate()函数。 函数loginTwo的req只包含一个标记,这就是为什么当我试图调用passport.authenticate()时,它显示错误。