gpt4 book ai didi

express - Passport Session(expressjs)基础——为什么需要序列化和反序列化?

转载 作者:行者123 更新时间:2023-12-01 07:51:57 26 4
gpt4 key购买 nike

Passport 认证中序列化和反序列化方法的用途是什么。

最佳答案

我很难理解它。但这就是我得到的,希望它可以节省您的时间。

您可以通过两种方式与服务器交互以提供对需要身份验证的受限信息的访问。
1.cookies 和 2.sessions

长话短说,cookie 是不安全的,因为它保留在客户端并且可以被访问和操纵。

但是当涉及到 session 时, session ID(有待解释)会保存在服务器中,因此这是一个安全的赌注。

这是 Passport 中间件的流程:

  • 登录信息已通过(用户名和密码)
  • 执行 Passport Authenticate(本地策略)以检查用户名和密码是否有效。
  • 如果用户名和密码为 VALID,将返回带有 Null(无错误)和 USER(来自数据库)的 DONE 回调。

  • 4. 序列化
    当身份验证有效时,SERIALIZE METHOD IS EXECUTED(开始 session )(使用方法定义中传递的任何参数)通常会保存 User.id 并在每次发送请求时进行验证。

    Passport .serializeUser(功能(用户,完成){
    完成(空,用户。_id); })

    在上面的方法中,传递了 user 对象,并将 user._id 作为键保存在服务器中。
    这意味着此 key (user.id)将用于维护 session 。

    这是通过将 user._id 保存在 req.passport.session.user ={_id : …}….(反序列化后解释)来完成的

    5. 反序列化
    Serialize 方法仅在身份验证后执行一次,稍后,对于后续请求,将执行 DESERIALIZE 方法,该方法维护 session ,其中传递 User.id 以维护 session ,如下所示。 (直到浏览器打开*)。

    passport.deserializeUser(function(id, done){…})

    用户对象在回调中返回并作为 req.user 附加到请求。

    认证/无认证:

    你还记得 Passport .初始化中间件 passport.session 中间件 在 App.js 中

    每次请求都会执行passport.initialize 中间件。
    之后,passport.session 中间件将在服务器上查找序列化用户。

    如果没有进行用户身份验证,则会创建一个空对象 (req.session.passport.user),其中将加载序列化用户。

    req.session.passport.user = {}。

    但是当身份验证已经完成并且 Passport.Authenticate 在完成回调(用户名和密码匹配案例)中返回了一个 VALID USER 时,然后

    req.session.passport.user = user._id

    User._id 传递给 req.session.passport.user

    下次在后续请求中执行passport.initialize 时,此ID 将附加到 session (req.session.passport.user) 中。

    在 initialize 方法在 session 中找到 id 后,它执行反序列化方法 & 用户信息通过 req.user 加载到请求中。

    请建议对此答案进行编辑或添加。 -PVTHOMAS

    关于express - Passport Session(expressjs)基础——为什么需要序列化和反序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45381931/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com