2013-03-14 102 views
4

我正在考虑在节点项目中使用Passport库(http://passportjs.org/)进行身份验证。在节点JS中进行身份验证的护照

passport.serializeUser(function(user, done) { 
    done(null, user.id); 
}); 

passport.deserializeUser(function(id, done) { 
    user.get(id, function (err, user) { 
     done(err, user); 
    }); 
}); 

我很纳闷:

1)不要这些被调用为每一个需要身份验证的请求

我通过以下护照会话功能混淆?或者当会话第一次创建时他们只被调用一次?

2)如何从我的脚本的其他部分访问“user”中的信息?

3)对于需要认证的请求,我在哪里放置任何附加逻辑。例如检查是否尚未达到允许的用户闲置时间值。

感谢(提前)对你的帮助

回答

3

1)serializeUser为用户创建一个会话(当认证成功)时被调用。这用于在Express会话中存储关于用户的某种标识信息(如独特的用户标识)。

deserializeUser被称为为每个请求,并采取那块从会话识别信息的由数据库查询的方式,或许以某种方式将其转换回一个完整的用户记录,但是这真的取决于你:不是只存储用户标识,您还可以将整个用户记录存储在会话中,但这取决于用户记录的类型和所使用的会话存储(如果可能的话)(例如,使用express.cookieSession将限制数据量你可以存储在一个会话中)。

这是存储整个用户记录可能是什么样子:

passport.serializeUser(function(user, done) { 
    // Here, 'user' is the result of the function called by 'new LocalStrategy()'; when 
    // you call done() below, that result will be stored in the session. 
    done(null, user); 
}); 

passport.deserializeUser(function(user, done) { 
    // Here, 'user' is what's stored in the session by serializeUser() 
    done(null, user); 
}); 

2)护照填充req.user,您可以在路线或中间件使用。

3)您可以制作一个中间件来执行这些检查。 This可能是一个很好的起点。

相关问题