node.js - 护照js生成的cookie内容
问题描述
我正在尝试构建节点应用程序
我正在使用护照 js 本地策略对用户进行身份验证。我有 3 个问题
1.)当用户登录时,护照会创建一个cookie。谁能告诉我 cookie 中存储了什么?
2.)有没有办法查看护照设置的cookie内容?
3.) 我观察到当用户注销时,即调用 req.logout() 时,passport 生成的 cookie 不会被删除,所以我们必须删除它还是保留它可以吗?用户注销后 cookie 的内容是什么?
谢谢你。
解决方案
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}
推荐阅读
- maven - 试图理解 OSGi 解析错误
- php - 如何在while循环中从mysqli_fetch_array()中检索当前和下一个元素?
- sql - Oracle:覆盖具有最长字符串的列中的值
- adobe - WCM IO 测试吊索映射
- java - 无法运行程序“query.sh”:CreateProcess error=2,系统找不到指定的文件
- python - Python boto3 从禁用备份的快照创建 rds 实例
- javascript - 在迁移中添加自动 createdAt 和 updatedAt 时间戳
- slurm - 将系统变量插入 SBATCH
- yii2 - 如何在 Yii2 中使用 Froala 所见即所得编辑器在保存内容时禁用 html 编码?
- typescript - 枚举联合类型的参数?