在nodejs

时间:2017-12-04 09:36:19

标签: node.js express authentication passport.js

大家好,我正在使用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()时它显示错误。

0 个答案:

没有答案