【问题标题】:Passport for authentication in Node JS在 Node JS 中进行身份验证的 Passport
【发布时间】:2015-01-07 00:02:42
【问题描述】:

我正在考虑在 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) 对于需要认证的请求,我在哪里放置任何额外的逻辑。例如,检查是否未达到允许的用户空闲时间值。

感谢(提前)您的帮助

【问题讨论】:

    标签: javascript node.js passport.js


    【解决方案1】:

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

    deserializeUser 为每个请求调用,并从会话中获取该标识信息 以某种方式通过数据库查询将其转换回完整的用户记录,但那是完全取决于您:您不仅可以存储用户 ID,还可以将整个用户记录存储在会话中,但这取决于用户记录的类型和您使用的会话存储(如果可能)(例如,使用 @ 987654324@ 会限制您可以在会话中存储的数据量)。

    这就是存储整个用户记录的样子:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-04
      • 2012-10-04
      • 2021-12-04
      • 2017-03-16
      • 2013-05-28
      • 1970-01-01
      相关资源
      最近更新 更多