在nodejs mongostore中跨子域维护登录会话

时间:2015-02-20 09:54:39

标签: node.js express subdomain

我正在开发一个nodejs网络应用程序,因为我有多个子域名,如domain.com,sub1.domain.com,sub2.domain.com等。

如果用户登录到sub1.domain.com并被重定向到domain.com或sub2.domin.com,则会在未登录的情况下提供,

如何跨子域和主域维护此会话?

我使用express,nodejs,mongodb。

app.use(session({
    secret: "secrete key",
    store: new MongoStore({
        db: "session-db"
    })
}));

我尝试这样设置,没有工作:

app.use(session({
    secret: "secret key",
    cookie: { domain:'.yourdomain.com'}, // here I used '.localhost'
    store: new MongoStore({
        db: "session-db"
    })
}));

1 个答案:

答案 0 :(得分:2)

不推荐您提出的问题,例如:Share cookie between subdomain and domain

你真正想要的是单点登录(SSO)。

有两种方法可以在Node中进行SSO(我很清楚,可能还有其他工具,我从未听说过):

  • 自己编写代码。基本上你要做的就是设置一个像login.mysite.com这样的域,你可以将用户重定向到域进行身份验证。在对其进行身份验证后,您会生成JWT,然后将用户重定向到othersubdomain.mysite.com/?token=xxx,其中xxx是您的JWT。这样,您的othersubdomain项目可以验证JWT是否有效,并将用户也记录在那里。
  • 使用像express-stormpath这样的库及其SSO功能(描述为here)。这是一项付费服务​​(虽然它有一个免费的计划),它可以100%为您完成这些工作。

我是express-stormpath库的作者,所以我有点偏颇,但总的来说,SSO的东西实际上非常复杂,并且有很多潜在的问题用它来实现错误的东西