首页 > 解决方案 > 护照js生成的cookie内容

问题描述

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

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

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

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

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

谢谢你。

标签: node.jsexpresspassport.jsnodespassport-local

解决方案


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 的信息。它不一定是用户,你只能保存用户ID或其他东西。

在登录后和创建会话之前调用 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}

推荐阅读