我刚刚用护照完成了注册身份验证.js但是当我尝试使用登录身份验证时,我不断收到错误
错误:无法将用户序列化到会话中
这是我的邮政路线:
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!")
}
})
我看到一个关于stackoverflow的评论,说我们需要做:
app.post('/login', passport.authenticate('local', {
successRedirect: '/accessed',
failureRedirect: '/access',
session: false
}));
在登录路由中。
使用上面的代码可以解决错误消息。也许这是我对护照身份验证的了解不足,但不是通过登录将用户信息存储在会话中的意义所在。如果我们将会话设置为 false,我们如何存储用户信息?
这是取自护照.js的文件。
禁用会话
身份验证成功后,Passport将建立持久的 登录会话。这对于用户的常见方案很有用 通过浏览器访问 Web 应用程序。但是,在某些情况下, 不需要会话支持。例如,API 服务器通常 要求在每个请求中提供凭据。当这是 在这种情况下,可以通过设置会话安全地禁用会话支持 选项为假。
所以基本上,区别在于,对于浏览器等客户端,您通常希望具有会话持久性。对于调用内部 API 并且实际上不需要持久性的情况,您可以禁用会话。
试试下面:
请确保您使用最新版本的护照(今天的护照版本为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 - 自定义回调并将会话设置为 false