据我研究,到目前为止,stackoverflow 的答案是关于在服务器重启后使 session 保持不变。
我考虑用 4 种可能的方式来处理我的平均应用程序。
- cookie session https://www.npmjs.com/package/cookie-session
- 使用 Json 网络 token (JWT) https://www.npmjs.com/package/jsonwebtoken
- 使用 connect-mongo/connect-redis
- passport.js
现在我怀疑我是否会在 mongo 和 redis 中重新启动我的服务器。 session 仍然存在,因为它们是外部数据存储。 但是如何使用 JWT 和 cookie session 使我的 session 持久化。 这些 session 变量存储在哪里。
对于passport.js,我遇到的解决方案是使 session 持久化是将 session 数据存储在connect-mongo/connect-redis中。
Passport 中有没有其他方法可以使 session 持久化?
最佳答案
如果您将 session 存储在外部存储中,则重新启动后它应该可用。
Passport 不对 session 负责。您可以独立于通行证设置 session 。 Passport 是具有使用 session 策略的身份验证中间件。 你设置了快速 session :
app.use(express.session(session options));
然后你初始化并设置 Passport 以使用 session :
app.use(passport.initialize());
app.use(passport.session());
表示不管你是否使用passport,session配置都是一样的。
有几种方法可以使 session 持久化: 它们中的大多数将 session 存储在数据库或文件系统中(内存存储仅适用于开发环境)。请看这个 npm 搜索列表 link .
来自官方快速 session 页面的兼容 session 存储列表https://github.com/expressjs/session#compatible-session-stores
如果正确实现,Jwt token 是无状态的。这意味着您的服务器不存储任何 session 数据,它不知道有多少 session 有效。如果它有有效的 jwt token ,它会授权请求。
Jwt token 可以存储一些数据,例如您的用户 ID。当您的服务器收到 token 时,它会对其进行解码并验证,然后您就可以访问此 token 中的数据。请阅读这篇文章了解更多详情:
https://stormpath.com/blog/jwt-the-right-way/
最重要的部分(还有更重要的东西,但有时会被遗忘):
Always verify the signature before you trust any information in the JWT
和:
Do not contain any sensitive data in a JWT
维护jwt请看这个模块:
https://www.npmjs.com/package/json-web-token
甚至对于一些混合解决方案模块(使用 jwt token 的 redis session ):
关于node.js - 服务器重新启动时如何在 Node js 中保持持久 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33055504/