用于在Node JS中进行身份验证的Passport

时间:2013-03-14 17:12:15

标签: javascript node.js passport.js

我正在考虑使用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)对于需要进行身份验证的请求,我在哪里添加任何其他逻辑。例如,检查是否尚未达到允许的用户空闲时间值。

先谢谢你的帮助

1 个答案:

答案 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可能是一个很好的起点。