gpt4 book ai didi

node.js - ExpressJS/PassportJS : Authentication vs. session

转载 作者:搜寻专家 更新时间:2023-10-31 23:30:54 27 4
gpt4 key购买 nike

我刚开始使用 NodeJS(和网络编程),但无法理解身份验证和 session 。我阅读了很多教程,就在我认为自己掌握了它的时候,我感到困惑。我的问题是处理身份验证(注册/登录)和持久 session 。

我正在使用 PassportJS,经过许多教程之后,我想我终于在这里找到了一个很棒的:https://scotch.io/tutorials/easy-node-authentication-setup-and-local

但现在我对 serializeUser 和 deserializeUser 如何处理 session 感到困惑。对于这个新手问题请耐心等待,但我的理解是用户 ID 用于跟踪 session 。

所以我的问题是:

  1. 用户 ID 是由 Passport 自动生成的?
  2. 序列化只是将用户 ID 添加到 session cookie 中?
  3. 最后,如何更改 maxAge 等 session 参数?我应该在哪里设置它们?我对 Express session 和 Passport session 有点困惑。

如果有人可以提供指向好的教程的链接,我们也将不胜感激。

谢谢。

最佳答案

Passport 不直接管理您的 session ,它只是使用您的 session 。因此,您将根据您使用的中间件来配置 session 的生命周期。以express自带的cookie中间件为例:

  app.use(express.session({ cookie: { maxAge: 60000 }}));

就 Passport 而言,它不会生成任何东西。它调用您的身份验证、序列化和反序列化函数来查找、加载和重新加载用户数据。流程是这样的:

 passport.use(<new Strategy>(function(username,password,done) { }))

这会接受带有用户名和密码值的登录表单提交,该值会传递到您的实现中。通常,生成用户对象(基于您的模型/实现)的数据库查找传递给 done(err,user) 函数。

现在您已经找到了一个 User 对象,它将被设置到请求对象上,但这只适用于该请求。 session用于序列化用户(一般是用户对象的ID),以便再次传入,重构用户。

 my.serializeUser = function(user,done)

这是您的函数,Passport 将您找到的用户对象传递给该函数。这是您构造该用户的字符串表示并将其传递给 done(err,string) 的地方,无论您作为第二个参数传递什么,都将与 session 一起存储。

 my.deserializeUser = function(string,request,done)

这是您的函数, key (由您的 serializeUser 创建)传回给您。然后您的代码使用它来检索完整的用户对象(可能是通过该用户 ID 进行的数据库查询)并将完整的用户对象传回给 done(err,user) 这再次根据请求设置你的处理程序。

因此,如何序列化、反序列化和验证完全取决于您。 Passport 提供了 Hook ,因此无论您选择何种策略,您都可以以相同的方式在路由上设置身份验证要求。

关于node.js - ExpressJS/PassportJS : Authentication vs. session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22186717/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com