我开始使用NodeJS(和Web编程),并且无法理解身份验证和会话.我阅读了很多教程,当我认为我有它时,我感到困惑.我的问题是处理身份验证(注册/登录)和持久会话.
我正在使用PassportJS,经过多次教程之后,我想我终于找到了一个很好的教程:https://scotch.io/tutorials/easy-node-authentication-setup-and-local
但现在我很困惑如何通过serializeUser和deserializeUser处理会话.请耐心等待我这个新手问题,但我的理解是用户ID用于跟踪会话.
所以我的问题是:
用户ID是由Passport自动生成的吗?
序列化只是将用户ID添加到会话cookie?
最后,如何更改会话参数,如maxAge?我应该在哪里设置它们?我对Express会话和Passport会话感到困惑.
如果有人可以提供一个赞赏的好教程的链接.
谢谢.
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提供了钩子,因此您可以以相同的方式在路径上设置身份验证要求,尽管您选择了策略.