req.user并且“通过身份验证”始终为假

时间:2018-07-09 08:36:46

标签: javascript node.js reactjs express passport.js

我正在对express.js(在router / user.js内部)使用React

router.get("/", function (req, res) {
  console.log("this is u" , req.user)
   console.log(req.isAuthenticated());
  if (req.user) {
     res.json({ user: req.user })
  } else {
    res.json({ user: 'does not exsist' })
}
});

在console.log中,始终显示未定义的值

console.log("this is u" , req.user)
       console.log(req.isAuthenticated());

上面的代码总是console.log false,现在我看了其他示例,他们提到了问题可能是由于您将内容放入server.js(或app.js)的方式,因此我检查并认为我的问题不是因为这个原因,反正这就是我要添加的东西

app.use(session({
  secret: 'keyboard cat', // -> used to encode and decode the session, the seceret we used will be used to encode to decode
  resave: true,
  saveUninitialized: true,
}));
app.use(passport.initialize());
app.use(passport.session());

//Session



passport.use(new LocalStrategy(user.authenticate()));
passport.serializeUser(user.serializeUser());
passport.deserializeUser(user.deserializeUser());

如果有人要查看以下内容,这是我完整的正确存储库:https://github.com/irohitb/litifier-

现在,有人可以指导我解决此问题吗?

2 个答案:

答案 0 :(得分:1)

这是因为未执行登录过程。 这导致未发送cookie,从而导致在下一个请求中未读取cookie,从而导致req.isAuthenticated()返回false

passport.js docs

  

请注意,使用自定义回调时,它将成为应用程序的   建立会话的责任(通过调用req.login())和   发送回复。

解决方案:

这看起来像您的注册页面,我认为您无需在此处进行passport.authenticate。那是用于登录。删除它。

注册新用户后,请执行以下操作:

req.logIn(user, function (err) {
     if (err) {
         return next(err);
     }
     return res.json(user) // send whatever you want or redirect
});

答案 1 :(得分:0)

尝试在路由中添加{凭据:'include'}

示例

get('/test', {credentials: 'include'})