4

我正在考虑在 Node 项目中使用 Passport 库 ( http://passportjs.org/ ) 进行身份验证。

我对以下护照会话功能感到困惑:

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) 如何从脚本的其他部分访问“用户”中的信息?

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

在此先感谢您的帮助

4

1 回答 1

3

1)serializeUser在为用户创建会话时调用(当身份验证成功时)。这用于在 Express 会话中存储有关用户的某种识别信息(如唯一的用户 ID)。

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);
});

req.user2)您可以在路由或中间件中使用的Passport 填充。

3)您可以制作一个中间件来实施此类检查。可能是一个很好的起点。

于 2013-03-14T18:01:05.307 回答