node.js - 我可以使用一台服务器的相同 Passport.js session 登录其他服务器吗

标签 node.js express cookies single-sign-on passport.js

我正在使用passport.jsexpress server我有 example repo running在端口 3000 上。

我希望能够像示例中那样使用端口 3000 使用 Passport 登录,并在不同端口(8000 和 9000)上运行的另外两个 Node 服务器上创建 session 。所有 3 个服务器都位于本地主机上。

在我想要的其他服务器之一上

app.all('*', require('connect-ensure-login')
             .ensureLoggedIn("http://localhost:3000/login"));

只有当用户登录 localhost:3000 时才能访问整个其他服务器。

如果我导航到http://localhost:8000/somepage,则使用上面建议的代码它将重定向到 http://localhost:3000/login我是否登录3000。它不会识别我已登录 3000。

最佳答案

是的,可以。您只需要它们都共享同一个 session 存储即可。 session 存储有很多选项; here is a fairly complete list 。最简单的可能是 session 文件存储,因为它不需要您运行任何其他数据库或内存缓存服务。您可以将其配置为使用特定路径来存储 session ,以便您可以使所有三个服务器看起来在同一个位置:

var session = require( 'express-session' );
var FileStore = require( 'session-file-store' )( session );

app.use( session( {
    store: new FileStore( {
        path: '/path/to/shared/session/storage/directory',
    } ),
    secret: 'keyboard cat',
} ) );

关于node.js - 我可以使用一台服务器的相同 Passport.js session 登录其他服务器吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35436422/

相关文章:

javascript - 无法在 Heroku 中仅通过 https 访问 http 上的 cookie

asp.net - 如果用户空闲 15 分钟,则删除 session (使用 cookie 维护)

node.js - 如何在Express中的单个路由处理程序中处理来自多个独立的Promise的错误?

node.js - 如何在 vscode 中获取 express.js 的智能感知

java - JSESSIONID cookie 有 '.node0' 后缀,而服务器端 sessionID 没有

node.js - 我应该像这样使用 redis : req. session.surname = 'toto' 还是像这样 client.set ('surname' , 'toto' )

node.js - 如何将变量传递给routes.index

node.js - Mongoose find 返回空数组(适用于其他集合)

linux - 在 Linux 中退出正在进行的 Node.js 服务器

node.js - 从 Node 中的模块加载特定文件