什么是passport.initialize()?(nodejs表示)

jwk*_*koo 14 javascript node.js npm node-modules passport.js

我现在正试图在我的应用程序中应用护照模块.

我正在读一些手册,据说,

app.use(passport.initialize());
app.use(passport.session());
Run Code Online (Sandbox Code Playgroud)

什么是app.use(passport.initialize())究竟在做什么?

passport.session() 可能是护照使用会话信息,

但我不知道 passport.initialize()

jpe*_*nna 18

有时最好查看代码:initialize() 上的passport github

TL; 博士

使用会话,initialize()设置函数以序列化/反序列化请求中的用户数据。

不需要使用passport.initialize(),如果你不使用sessions

/**
 * Passport initialization.
 *
 * Intializes Passport for incoming requests, allowing authentication strategies
 * to be applied.
 *
 * If sessions are being utilized, applications must set up Passport with
 * functions to serialize a user into and out of a session.  For example, a
 * common pattern is to serialize just the user ID into the session (due to the
 * fact that it is desirable to store the minimum amount of data in a session).
 * When a subsequent request arrives for the session, the full User object can
 * be loaded from the database by ID.
 *
 * Note that additional middleware is required to persist login state, so we
 * must use the `connect.session()` middleware _before_ `passport.initialize()`.
 *
 * If sessions are being used, this middleware must be in use by the
 * Connect/Express application for Passport to operate.  If the application is
 * entirely stateless (not using sessions), this middleware is not necessary,
 * but its use will not have any adverse impact.
...
Run Code Online (Sandbox Code Playgroud)

  • 您好,例如,在使用 JWT 令牌时,您是否真的不需要使用 Passport.initialize() ? (2认同)

Har*_*nan 16

passport.initialize()是一个初期化Passport的中间件.

中间件是可以访问请求对象(req),响应对象(res)以及应用程序请求 - 响应周期中的下一个中间件函数的函数.

Passport是用于验证请求的Node的身份验证中间件.

所以基本上passport.initialize()初始化认证模块.

passport.session()是另一个中间件,它改变请求对象并将当前会话ID的"用户"值(从客户端cookie)更改为真正的反序列化用户对象.这里将详细解释.


TGr*_*rif 7

来自 Passportjs 文档:

在基于 Connect 或 Express 的应用程序中,需要 Passport.initialize() 中间件来初始化 Passport。如果您的应用程序使用持久登录会话,则还必须使用passport.session() 中间件。

如果我们看一下源代码,我们可以看到 Passport.initialize() 中间件基本上将 Passport 实例添加到传入请求中,以便可以继续执行身份验证策略。
如果存在会话,它也会添加到请求中。