在Node JS中用于身份验证的护照

Passport for authentication in Node JS

本文关键字:身份验证 用于 Node JS      更新时间:2023-09-26

我正在考虑在Node项目中使用Passport Library (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)我如何从脚本的其他部分访问"user"中的信息?

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

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

3)您可以制作一个中间件来实现这样的检查。