passport-authentication中serialize和deserialize方法的用途。
我费了好大劲才把头绕起来。但这就是我得到的,希望它能节省你的时间。
您可以通过两种方式与服务器进行交互,以提供对需要身份验证的受限信息的访问。1.cookie和2.sessions
长话短说-Cookie是不安全的,因为它仍然存在于客户端,并且可以被访问和操作。
但是当涉及到会话时,会话id(将被解释)被保存在服务器中,因此它是一个安全的赌注。
passport中间件的流程如下:
4.SERIALIZE当身份验证有效时,执行SERIALIZE方法(以开始会话)(它使用方法定义中传递的任何参数)通常保存user.id,并在每次发送请求时对其进行验证。
Passport.SerializeUser(function(user,done){done(null,user._ID);)
在上述方法中,传递user对象,并将user._id作为键保存在服务器中。这意味着这个键(user.id)将用于维护会话。
这是通过将user._id保存在req.passport.session.user=_id:.(descerialize后解释)来实现的
5.DESERIALIZE Serialize方法只在身份验证后执行一次,稍后,对于后续请求执行DESERIALIZE方法,该方法维护会话,在会话中传递user.id以维护会话,如下所示。(直到浏览器打开*)。
Passport.DeserializeUser(function(id,done)})
对象在回调中返回,并作为req.user附加到请求。
身份验证/无身份验证:
还记得app.js中的passport.initialize中间件和passport.session中间件吗
passport.initialize中间件在每个请求上执行。然后passport.session中间件将在服务器上查找序列化用户。
如果没有进行用户身份验证,则会创建一个空对象(req.session.passport.user),在该对象中加载序列化的用户。
req.session.passport.user=}。
但是当身份验证已经完成并且passport.authenticate在完成的回调中返回了一个有效用户(用户名和密码匹配情况)时,则
req.session.passport.user=user._id
user._id传递给req.session.passport.user
在后续请求下一次执行Passport.Initialize时,此Id将附加到会话(req.session.Passport.User)。
initialize方法在会话中找到id后,它执行反序列化方法&;用户信息通过req.User加载到请求中。
请务必建议对这个答案进行编辑或添加。-PVThomas