我正在使用passport-local-mongoose并尝试使用存储库中的login example设置一个简单的工作示例。但我遇到了问题,我收到一条错误消息“错误:无法将用户序列化为会话”。
我在gist中重现了这个问题。 (要运行要点,您需要替换user.js文件中的mongodb服务器IP和数据库名称,并使用username
和password
值对/ register端点执行POST。)
在其中,您将看到端点'/ setval'和'/ getval',它们在会话中设置值并检索它,表明会话支持正在运行。即使在对'/ login'进行POST之后,端点'/ authtest'也会给出未经授权的响应。端点'/ authdebug'提供了更多信息 - 上面提到的错误。
任何人对于发生的事情都有任何想法?我的事情已经不多了。
答案 0 :(得分: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。