护照 js req.user 在 req.login 后不可用

ewi*_*ard 5 javascript cookies session node.js express

我正在尝试正确设置我的护照会话。我已经到了这样的地步:在用户注册后 - 我执行req.login(),然后我收到一条控制台消息,console.log(req.user). 它返回:

{ email: 'xxxx', password: 'xxxx', id: 0 }

因此,似乎在创建用户后就req.user可用了。但是,当用户登录时,我有以下路线:

app.post('/login', passport.authenticate('local-login', { failureRedirect: '/login'}),
      function(req, res) {
         console.log(req.user);
         res.redirect('/users');
      }
);
Run Code Online (Sandbox Code Playgroud)

该控制台消息(来自调用后)返回:

{ id: null,
  email: 'xxxxx',
  password: 'xxxxx' }
Run Code Online (Sandbox Code Playgroud)

正如您所看到的 - 登录后 - 它重定向到/users- 这是我的获取请求:

app.get('/users', function(req, res){
  console.log(req.user);
  res.render('partials/profile.html');
});
Run Code Online (Sandbox Code Playgroud)

该控制台消息返回undefined- 所以req.user没有被传递。此外,如果我检查会话,console.log(req.session)我会得到:

{ cookie: 
   { path: '/',
     _expires: null,
     originalMaxAge: null,
     httpOnly: true,
     secure: true },
  passport: {} }
Run Code Online (Sandbox Code Playgroud)

所以你可以看到 - cookie 中没有护照用户,它是一个空集。

我哪里错了?

谢谢!

小智 3

我遇到了同样的问题,我只是将会话名称设置为登录帖子中的用户名。然后我就可以在应用程序的其余部分中获取它。

app.post('/login', passport.authenticate('local-login', { failureRedirect: '/login'}),
  function(req, res) {
     console.log(req.user);
     req.session.user = req.user;
     res.redirect('/users');
  }
);
Run Code Online (Sandbox Code Playgroud)

所以你可以在任何地方访问它。