【问题标题】:contents of cookie generated by passport js护照js生成的cookie内容
【发布时间】:2020-08-27 05:11:32
【问题描述】:

我正在尝试构建一个节点应用程序

我正在使用护照 js 本地策略来验证用户身份。我有 3 个问题

1.) 当用户登录时,护照会创建一个 cookie。谁能告诉我 cookie 中存储了什么?

2.) 有没有办法查看passport设置的cookie内容?

3.) 我观察到当用户注销时,即调用 req.logout() 时,passport 生成的 cookie 不会被删除,所以我们必须删除它还是保留它可以吗?用户登出后cookie的内容是什么?

谢谢。

【问题讨论】:

    标签: node.js express passport.js nodes passport-local


    【解决方案1】:

    Passport js 不会创建 cookie。 Passport js 是一个身份验证工具,它(当然这里只讨论本地案例)获取用户名/密码,比较用户发送的用户名和数据库中的用户名。此外,它获取密码的哈希值并比较数据库中密码的哈希版本(因为密码将数据库保存为哈希值/没有人希望将纯文本密码保留在数据库中)。如果它是真的,它确认身份验证。同样对于注册(保存用户和哈希密码),您必须使用密码js。

    但是,如果我们不必让用户保持登录状态,那么所有这些场景都是无用的。此时,您必须使用 cookie/sessions/jwt 令牌来保留显示用户合法的信息。要创建会话/cookie,您必须使用另一个库。我认为最常见的是快速会话。 Express 会话不会将所有用户信息保存在 cookie 中。它创建一个 cookie 并保存与您的数据相关的密钥。因此,您的数据仅保存在服务器端并且是安全的。

    编辑:我意识到我在编辑前的最后一段有一些错误/缺失的信息。所以我把最后一段删掉了,更正的版本如下:

    您在会话 cookie 中存储的内容由序列化/反序列化函数指定。这些功能由护照 js 提供,因为它是身份验证库。典型的序列化/反序列化是这样的

    passport.serializeUser(function(user, done) {
      done(null, user); 
    });
    
    passport.deserializeUser(function(user, done) {
        done(null,user)
    });    
    

    这里,“完成”是回调函数,用户是您放入 cookie 中的信息。不一定非要user,只能保存userId或者别的什么。

    serializeUser 函数在登录后和创建会话之前调用。每个具有 cookie 的请求都会调用 deserializeUser 函数。它所做的基本上是从cookie中获取用户信息并将其放入req.session.passport中。

    最后,让我们看看会话 cookie 的样子。这是一个保存在服务器端的示例会话 cookie。

    {"cookie":{"originalMaxAge":2591971094,"expires":"2020-09-24T21:11:05.721Z","httpOnly":false,"path":"/"},"passport":{"user":{"_id":"5f307fc99f5c667918a56122","username":"test","__v":0}},"__lastAccess":1598389894627}
    

    【讨论】:

      猜你喜欢
      • 2020-03-13
      • 2017-08-18
      • 2012-12-19
      • 2020-02-04
      • 2014-06-04
      • 2022-11-28
      • 1970-01-01
      • 2017-02-28
      • 1970-01-01
      相关资源
      最近更新 更多