我目前有两个独立的节点应用程序在两个不同的端口上运行,但共享相同的后端数据存储。我需要在两个应用程序之间共享用户会话,以便当用户通过一个应用程序登录时,他们的会话可用,并且他们似乎已登录到另一个应用程序。在本例中,它是一个面向公众的网站和一个管理后端。
我们的设置如下:
- 节点与快递
- 护照用于处理本地策略的身份验证
- 我们使用 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,以便可以在不同子域之间共享会话?
也许有点过时了,但此时 Express-session 可以识别 cookie 的域选项。据消息来源:
function session(options){
var options = options || {}
// name - previously "options.key"
, name = options.name || options.key || 'connect.sid'
, store = options.store || new MemoryStore
, cookie = options.cookie || {}
...
这是为了设置 cookie:
var Cookie = module.exports = function Cookie(options) {
this.path = '/';
this.maxAge = null;
this.httpOnly = true;
if (options) merge(this, options);
...
所以,这样的东西适用于当前的 1.10.1 master:
secret: "my secret",
cookie: {
domain: "mydomain.com",
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)