node.js - 服务器重新启动时如何在 Node js 中保持持久 session ?

标签 node.js session express redis passport.js

据我研究,到目前为止,stackoverflow 的答案是关于在服务器重启后使 session 保持不变。

我考虑用 4 种可能的方式来处理我的平均应用程序。

  1. cookie session https://www.npmjs.com/package/cookie-session
  2. 使用 Json 网络 token (JWT) https://www.npmjs.com/package/jsonwebtoken
  3. 使用 connect-mongo/connect-redis
  4. 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 ):

https://www.npmjs.com/package/jwt-redis-session

关于node.js - 服务器重新启动时如何在 Node js 中保持持久 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33055504/

相关文章:

html - ExpressJS/NodeJS 重定向图像

node.js - 一旦通过身份验证,始终转到索引页面而不是登录

node.js - Express.js - 类似 ASP.NET 的 MVC 路由

node.js - 在 Mongoose 模式中定义一个唯一的数字数组

database - Knex promise 交易

python - 多POST查询( session 模式)

java - 如何使浏览器 session 无效

node.js - 如何在Windows Azure上部署socket.io Node.js应用程序?

javascript - 如何从 Angularjs 访问 Session 值?

javascript - Passportjs 回调,理解参数