我刚刚完成了使用passport.js的注册身份验证,但是当我尝试使用登录身份验证时却不断出错
错误:无法将用户序列化为会话
这是我的发帖路线:
Until
我看到了关于stackoverflow的评论,说我们需要这样做:
router.post("/login",passport.authenticate('local-login'),function(req,res){
res.redirect("/users")
if (req.user) {
console.log("Logged In!")
} else {
console.log("Not logged in!")
}
})
在登录路径中。
使用上面的代码确实可以解决错误消息。也许这是我对护照认证的理解不充分,但这不是通过登录将用户信息存储在会话中的意义。如果将session设置为false,我们如何存储用户信息?
答案 0 :(得分:0)
尝试以下方法:
请确保您使用最新版本的护照(今天为0.2.1)。
请尝试传递{session:false}作为req.logIn()函数的第二个参数:
app.get('/login', function (req, res, next) {
passport.authenticate('local', function (err, user, info) {
if (err) { return next(err); }
if (!user) { return res.redirect('/login'); }
req.logIn(user, { session: false }, function (err) {
// Should not cause any errors
if (err) { return next(err); }
return res.redirect('/users/' + user.username);
});
})(req, res, next);
});
打开以下链接以获得更多信息: PassportJS - Custom Callback and set Session to false
答案 1 :(得分:0)
这取自password.js的docs。
禁用会话
成功通过身份验证后,Passport将建立持久性 登录会话。这对于用户的常见情况很有用 通过浏览器访问Web应用程序。但是,在某些情况下, 会话支持不是必需的。例如,API服务器通常 要求随每个请求提供凭据。当这是 在这种情况下,可以通过设置会话安全地禁用会话支持 选项为false。
因此,基本上,区别在于对于浏览器等客户端,您通常希望具有会话持久性。对于某些情况,当您调用内部API并不需要持久性时,可以禁用会话。