我正在考虑使用Passport库(http://passportjs.org/)在Node项目中进行身份验证。
我对以下护照会话功能感到困惑:
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)对于需要进行身份验证的请求,我在哪里添加任何其他逻辑。例如,检查是否尚未达到允许的用户空闲时间值。
先谢谢你的帮助
答案 0 :(得分:3)
1)在为用户创建会话时(当身份验证成功时)调用serializeUser
。这用于在Express会话中存储关于用户的某种标识信息(如唯一的用户标识)。
deserializeUser
,并从会话中获取的那条识别信息,以某种方式通过数据库查询将其转换回完整的用户记录,也许,但这真的取决于你:不仅仅是存储用户ID,你还可以将整个用户记录存储在会话中,但这取决于用户记录的类型和你正在使用的会话存储(如果可能的话)(例如,使用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)Passport填充req.user
,您可以在路由或中间件中使用它。
3)你可以制作一个中间件来实现这样的检查。 This可能是一个很好的起点。