2016-04-29 32 views
1

我有两个独立的Express 4.x应用程序运行在同一台服务器(不同的端口),共享一个MongoDB实例。他们都使用不同的数据库,并有不同的会话秘密。登录到一个快速应用程序破坏其他(同一服务器)会话

我可以单独登录到应用程序A或B,而没有问题。我的会议得到保持,一切都很好。但是,如果我登录到A然后登录到B,则A中的会话被销毁(反之亦然)。

这两个应用程序具有几乎相同的本地身份验证。他们的serializeUserdeserializeUser是非常原始的(跟随Passport docs几乎到tee)。

看来,当登录到A和B时,req.session.passport被破坏,导致req.user无法在应用A上正确序列化,并且会话被认为是无效的。

我开始认为它与两个应用程序在同一台计算机(因此是域)上运行的事实不同,只有端口不同。

+1

我认为你在这两个应用程序中使用相同的会话cookie名称。用两个不同的名字,希望一切都会好起来。 –

+0

@VickyR如何定义会话cookie名称?其中一个配置选项是否有属性? – Erik

+0

这里写的会话的代码是什么? –

回答

1

快速会话:Node.js中Express的简单会话中间件。要使用这个,你必须像这样包含这个包。

var session = require('express-session'); 

要安装该软件包,运行以下命令:

$ npm install express-session 

如何快速利用这一点,下面的代码给出:

app.use(session({ 
    secret: 'secretkey', 
    resave: false, 
    saveUninitialized: true, 
    cookie: { secure: true } 
})); 

默认的名称在响应中设置的会话ID cookie(并在请求中读取)为connect.sid。要覆盖此使用下列内容:

app.use(session({ 
    name: 'cookiename', 
    secret: 'secretkey', 
    resave: false, 
    saveUninitialized: true, 
    cookie: { secure: true } 
})); 

更多参考看到此链接 - https://www.npmjs.com/package/express-session

注: -把你express-session声明在应用程序app.js前app.use(passport.session())声明。

希望这将有助于解决您的查询!

+0

@Erik,我在回答中更新了“如何在快速会话中覆盖默认cookie名称”。 –

相关问题