2013-05-11 71 views
6

我正在编写使用node.js和passport.js进行身份验证的简单应用程序。在passport.js中的serializeUser函数中访问请求对象

我可以访问serializeUser中的请求对象吗?

+0

我想问这个问题。 [看来现在已经有一种方法可以做到这一点](https://github.com/jaredhanson/passport/issues/111),但不幸的是,我对护照的理解并不十分熟悉它的实际工作原理。有人可以请回答这个解释'req'是如何在'passport.deserializeUser(function(id,done)''内访问的? – laggingreflex 2014-07-06 00:10:56

回答

1

我认为钇和laggingreflex问题略有不同:

要回答钇:

要访问你所要做的是明确的中间件,将解决你的资源的授权内的请求对象。

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()来检查第三方认证是否成功。

要回答laggingreflex:

您不能访问请求对象内passport.deserializeUserpassport.serializeUser,因为这些方法都是为了处理的会话中的用户信息序列化(请看github解释)。这些方法接收一个对象和一个函数作为参数。在serializeUser上,第一个参数是包含用户信息的对象,您将序列化并传递给done函数(回调)。在deserializeUser第一个参数是序列化的对象,您必须执行相反的操作。

相关问题