0

我正在使用passport-local-mongoose并尝试使用存储库中的登录示例设置一个简单的工作示例。但是我遇到了问题,我收到一条错误消息,上面写着“错误:无法将用户序列化到会话中”。

我已经在gist中重现了这个问题。(要运行 gist,您需要在 user.js 文件中替换 mongodb 服务器 IP 和数据库名称,并使用usernamepassword值对 /register 端点进行 POST。)

在其中,您将看到端点“/setval”和“/getval”,它们在会话中设置值并检索它,表明会话支持正在工作。端点“/authtest”给出未经授权的响应,即使在对“/login”进行 POST 之后也是如此。端点 '/authdebug' 提供了更多信息 - 上面提到的错误。

有人对发生的事情有任何想法吗?我已经没有东西可以尝试了。

4

1 回答 1

1

我认为这passport.authenticate应该只用在实际用于验证用户的路由上;在你的情况下,这将是/login路线。

对于您要确保用户先前已通过身份验证的路由,例如/authtest,您需要一个中间件来检查用户是否已通过身份验证:

function ensureAuthenticated(req, res, next) {
  if (req.isAuthenticated()) {
    return next();
  }
  res.redirect('/login'); // or your login page
}
// and
app.get('/authtest', ensureAuthenticated, function(req, res) {
 ...
});

该中间件的替代方案是connect-ensure-login

于 2013-03-25T11:03:36.400 回答