ExpressJS/PassportJS:身份验证与会话

 baby小明君 发布于 2023-01-19 22:10

我开始使用NodeJS(和Web编程),并且无法理解身份验证和会话.我阅读了很多教程,当我认为我有它时,我感到困惑.我的问题是处理身份验证(注册/登录)和持久会话.

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

但现在我很困惑如何通过serializeUser和deserializeUser处理会话.请耐心等待我这个新手问题,但我的理解是用户ID用于跟踪会话.

所以我的问题是:

    用户ID是由Passport自动生成的吗?

    序列化只是将用户ID添加到会话cookie?

    最后,如何更改会话参数,如maxAge?我应该在哪里设置它们?我对Express会话和Passport会话感到困惑.

如果有人可以提供一个赞赏的好教程的链接.

谢谢.

1 个回答
  • Passport不直接管理您的会话,它只是使用您的会话.因此,您将根据您使用的中间件配置会话的生命周期.使用express自己的cookie中间件,例如:

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

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

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

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

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

     my.serializeUser = function(user,done)
    

    这是Passport传递您找到的User对象的函数.这是您构造该User的String表示并将其传递给done(err,string) Wone的地方,因为第二个参数与会话一起存储.

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

    这是您的函数,其中密钥(由serializeUser创建)传递给您.然后,您的代码使用它来检索完整的User对象(可能是该用户的ID的数据库查询),并将完整的用户对象传回.done(err,user)这将再次设置您的处理程序请求.

    因此,如何序列化,反序列化和验证都取决于您.Passport提供了钩子,因此您可以以相同的方式在路径上设置身份验证要求,尽管您选择了策略.

    2023-01-19 22:31 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有