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,谢谢!