反序列化每个请求?这不是不必要的数据库读取吗?

Joh*_*ohn 5 authentication serialization mongodb passport.js

了解护照序列化反序列化

在从一系列指南和 SO 帖子中拼凑出我的第一个节点应用程序时,我现在偶然发现了序列化和反序列化护照功能......

我有点了解它们的功能......但似乎有些不对劲。

http://toon.io/understanding-passportjs-authentication-flow/

passport.deserializeUser 在每次请求时被passport.session 调用。它使我们能够在每个请求上加载额外的用户信息。这个用户对象作为 req.user 附加到请求,使其在我们的请求处理中可以访问。

这意味着每个请求都运行一个数据库请求来检索用户对象?我的应用程序绝对不需要数据库请求来获取每个请求的完整用户对象..事实上我想不出一个需要这个的应用程序..

因此,如果我只注册序列化函数而不是反序列化函数。

lag*_*lex 0

passport.session是实际调用反序列化函数的中间件,因此更好的策略是策略性地将中间件放置在您想要的位置:

app.get('/', ...);
app.use(passport.session());
app.get('/user', ...)
Run Code Online (Sandbox Code Playgroud)

这样您就可以选择加载或不加载用户对象的路由。

但通常的做法确实是根据每个请求从数据库恢复用户对象。成本几乎为零(~1ms),所以我不会真正担心它。