【发布时间】:2012-11-17 00:51:50
【问题描述】:
我目前有两个独立的节点应用程序在两个不同的端口上运行,但共享相同的后端数据存储。我需要在两个应用程序之间共享用户会话,以便当用户通过一个应用程序登录时,他们的会话可用并且他们似乎已登录到另一个应用程序。在这种情况下,它是一个面向公众的网站和一个管理后端。
我们的设置如下:
- 带快递的节点
- passport 被用于通过本地策略处理身份验证
- 我们使用 connect-redis 允许我们通过 redis 共享会话。
- 我们的域如下所示:www.mydomain.com 和 adm.mydomain.com
两个应用程序的会话内容(和 redis)的配置是相同的:
session: {
options: {
secret: "my secret",
cookie: {
domain: "mydomain.com",
maxAge:1000*60*60*24
}
},
redis: {
host: 'my host',
maxAge: 86400000,
secret: "my secret"
}
}
app.js 中会话内容的配置如下所示:
if ( app.settings.env === "production" ) {
session.options.store = new RedisStore(session.redis);
}
app.use(express.session(session.options));
app.use(passport.initialize());
app.use(passport.session({ secret: 'a different secret' }));
我期望它做什么:允许我们在两个应用之间的 cookie 中看到相同的会话 id。
所以我的问题是:如何设置 express、redis 和 passport,以便您可以在不同的子域之间共享会话?
【问题讨论】:
-
我认为您可能需要将 cookie 域指定为
".mydomain.com"-- 请注意前导.。 -
没有“”?我们昨天在测试中使用了“.mydomain.com”,但这似乎不起作用。今天早上我会试一试,看看结果如何。
-
你输入了
*,对吧?在那种情况下,是的,只是前导点。我认为这就是使 cookie 可以从不同的子域读取的原因。让我知道,我可以提供它作为答案。 -
所以使用“.mydomain.com”实际上也不起作用。我们仍在寻找……不过,感谢 Linus 的意见。
-
你有没有让这个工作?有可能吗?
标签: node.js express redis session-state