【问题标题】:req.isAuthenticated always returns false (react frontend)req.isAuthenticated 总是返回 false (反应前端)
【发布时间】:2020-06-10 14:28:29
【问题描述】:

我正在使用passport js 进行身份验证,并且passport 没有将用户对象放入req 对象(req.user 返回未定义)。

登录路径:-

Router.post("/login",ensurelog,async (req, res, next) => {
  await passport.authenticate("local", { failWithError: true }, function(err,user,info
  ) {
    if (err) {
      console.log("1", err);
    } 
    else if (info)
     {
      res.json({info}).end();
    } 
    else if (user) {
      res.json({user}).end();
    }
  })(req, res, next);
});  

当 react 客户端收到用户对象时,页面使用 this.props.history.push() 函数重定向到不同的组件,该组件使用来自 react-router-dom 的 BrowserRouter 路由
确保日志功能:-

function(req,res,next){
        //console.log("reached ensurelog")
       console.log(req.user) //always returns undefined
       console.log(req.isAuthenticated()) //always returns false
       if(req.isAuthenticated()){

          res.json({
              message:'already loged in'
          }).end();
       }
        next();

    }

【问题讨论】:

  • erruser 在匿名回调函数 (function(err,user,info) { ... }) 中的值是否正确? (也就是说,是之后的问题吗?)
  • 是的,确实如此..,它在成功登录时返回用户对象,如果登录失败则返回带有错误消息的信息对象

标签: javascript node.js reactjs passport.js


【解决方案1】:

我刚刚快速浏览了API documentation。看起来您的 post 参数有点混乱。你可以试试这个:

var ensurelog = function(req,res,next) {
  passport.authenticate('local', function(err, user, info) {
    console.log(user);
  })(req, res, next);
};


Router.post("/login", ensurelog)

另外值得注意的是,这个 API 似乎使用回调函数(不是 Promises)来处理异步请求。

【讨论】:

    猜你喜欢
    • 2016-04-01
    • 2014-03-24
    • 2020-11-29
    • 2018-08-06
    • 2021-04-03
    • 2017-05-30
    • 2022-07-30
    • 1970-01-01
    • 2015-05-20
    相关资源
    最近更新 更多