首页 > 解决方案 > 2个passport.authenticate方法的区别

问题描述

这是相同的登录路径。只有2种不同的方法。

第一条路线

router.post('/login', passport.authenticate('local',{session:false}),async (req,res) => { 
  console.log("\n\n\n ------------------------222222")
        console.log(req.user);
    });

并且请求对象有用户&被显示。

而在第二条路线

router.post('/login', (req, res, next) => {
  passport.authenticate('local', async (err, user, info) =>{
    if(err){
      console.log(err);
    }
    console.log("\n\n\n ------------------------")
        console.log(req.user); //undefined
    if(user){
      // it works here 
    }
    else{
      res.status(422).json(info);
    }
  })(req, res, next);
});

console.log(req.user);显示未定义。但是用户从 mongo db 中获取了用户详细信息。

有人可以解释一下吗。

标签: node.jspassport.js

解决方案


在第二个函数中,您可以获取user密钥中的用户。但是,您必须将其添加到req对象中。可以这样做

if(user){
  // it works here 
  req.user = user;
}

在第一种情况下,它已经被添加到对象中,因为它在进入下一个异步函数之前req已经执行。 如果您在 if else 之后打印,它将为您提供确切的详细信息。passport.authenticate
req.user


推荐阅读