我正在使用 node.js 和 passport.js 编写简单的应用程序进行身份验证。
我可以访问 serializeUser 中的请求对象吗?
其实很简单:req
作为第一个参数添加
passport.deserializeUser(function(req, id, done) {...
https://github.com/jaredhanson/passport/issues/111
如果你这样做req.res.render('whatever'
,它会起作用。
我认为钇和滞后反射的问题略有不同:
回答钇:
要访问请求对象,您必须在处理资源授权的快速中间件中进行。
function authMethod(req, res, next) {
if (req.isAuthenticated())
{
console.log(req.user);
return next();
}
res.status(401).send({user:undefined});
}
app.get('/',authMethod,function(req,response)
{
res.status(200).send("OK");
}
如果您已经完成了配置,Passaport 将对您的请求对象进行修改,因此您可以使用req.user
. 您还有一个方法 ,req.isAuthenticated()
来检查第三方身份验证是否成功。
回答滞后反射:
您无法访问内部的请求对象passport.deserializeUser
,passport.serializeUser
因为这些方法是用来处理会话内部用户信息的序列化(查看github说明)。这些方法接收一个对象和一个函数作为参数。第一个参数是一个包含用户信息的对象,您将对其serializeUser
进行序列化并传递给done
函数(回调)。deserializeUser
第一个参数是一个已序列化的对象,您必须执行相反的操作。