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

时间:2014-05-31 02:36:05

标签: javascript node.js session cookies 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');
      }
);

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

{ id: null,
  email: 'xxxxx',
  password: 'xxxxx' }

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

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

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

{ cookie: 
   { path: '/',
     _expires: null,
     originalMaxAge: null,
     httpOnly: true,
     secure: true },
  passport: {} }

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

我哪里错了?

谢谢!

1 个答案:

答案 0 :(得分:2)

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

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

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