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}