- express/
- Passport会话(expressjs)的基础知识-为什么我们需要序列化和反序列化?
Passport会话(expressjs)的基础知识-为什么我们需要序列化和反序列化?
Passport会话(expressjs)的基础知识-为什么我们需要序列化和反序列化?,express,passport.js,Express,Passport.js,序列化和反序列化方法在passport身份验证中的作用是什么。我很难理解它。但这就是我得到的,希望能节省您的时间
有两种方法可以与服务器交互,以提供对需要身份验证的受限信息的访问。
1.cookies和2.会话
长话短说-cookies是不安全的,因为它留在客户端,可以访问和操纵
但是当涉及到会话时,会话id(待解释)会保存在服务器中,因此这是一个安全的赌注
这就是passport中间件的流程:
已传递登录信息(用户名和密码)
执行Passport身份验证(本地策略)以检查用户名和密码是否有效
序列化和反序列化方法在passport身份验证中的作用是什么。我很难理解它。但这就是我得到的,希望能节省您的时间
有两种方法可以与服务器交互,以提供对需要身份验证的受限信息的访问。
1.cookies和2.会话
长话短说-cookies是不安全的,因为它留在客户端,可以访问和操纵
但是当涉及到会话时,会话id(待解释)会保存在服务器中,因此这是一个安全的赌注
这就是passport中间件的流程:
已传递登录信息(用户名和密码)
执行Passport身份验证(本地策略)以检查用户名和密码是否有效
将返回带有Null(无错误)和用户(来自数据库)的已完成回调 如果用户名和密码有效
4.序列化
当身份验证有效时,执行序列化方法(以开始会话)(使用方法定义中传递的任何参数),通常会保存User.id,并在每次发送请求时进行验证
passport.user(函数(user,done){
完成(空,用户。_id);})
在上面的方法中,传递user对象,并将user.\u id保存为服务器中的密钥。
这意味着此密钥(user.id)将用于维护会话
这是通过在req.passport.session.user={{u id:…}….中保存用户id来完成的(反序列化后解释)
5.反序列化
Serialize方法仅在身份验证后执行一次,对于后续请求,将执行反序列化方法,该方法将维护传递User.id的会话,以维护会话,如下所示。(直到浏览器打开*)
passport.deserializeUser(函数(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.\u id
用户id被传递给req.session.passport.User
当下次在后续请求中执行passport.initialize时,此Id将附加到会话(req.session.passport.user)中
initialize方法在会话中找到id后,它执行反序列化方法&用户信息通过req.User加载到请求中
请建议对此答案进行编辑或添加。-PVTHOMAS能否添加user.id
的含义?我们是否需要在mongodb
模型中实际使用它,或者它是mongos自动生成的\u id
?如果我们需要id
属性,如果它是强制性的,那么最好添加它以进行澄清。为什么不使用\u id
?我的坏@NikitaVlasenko应该是用户。\u id,mongo生成的objectId,谢谢!