【问题标题】:Setting a domain with Express sessions stops cookie from being saved使用 Express 会话设置域会阻止 cookie 被保存
【发布时间】:2021-01-04 20:57:06
【问题描述】:

我有一个节点 js 服务应用程序和一个反应前端。我正在使用 Discord oauth 和 express 会话对我的应用程序前端进行身份验证。

在本地运行时一切正常,但我发现在将我的应用程序部署到 heroku 时,我的服务将 cookie 设置为服务的主域,这意味着我的前端无法使用它。

(例如,cookie 域被设置为“fakeservice.herokuapp.com”而不是“fakefrontend.herokuapp.com”)

显然这在本地工作,因为两个应用程序都在本地主机上运行,​​这意味着 cookie 主机无论如何都是相同的。

以下是设置 cookie 的一段代码,但是如果我尝试编辑 cookie 的域或路径,它不会保存到浏览器。

我唯一可以更改并仍然保存的是 MaxAge。

我读过的所有解决方案似乎都在 cookie 对象中设置了这个域元素,但这再次阻止了我的 cookie 被保存到浏览器。

任何人都可以提供的任何帮助或指导将不胜感激。

app.use(session({
    secret: SECRET_GOES_HERE,
    store: new Store({
        url: MONGODB_URI,
        mongoOptions: {useNewUrlParser: true, useUnifiedTopology: true}
    }),
    cookie: {
        maxAge: 7200000,
        domain: '.herokuapp.com' << adding this breaks cookie save
    },
    resave: false,
    saveUninitialized: false,
}))
app.use( cors({
    credentials: true,
    origin:['.herokuapp.com']
}));

【问题讨论】:

    标签: javascript node.js express express-session


    【解决方案1】:

    所以在进一步挖掘之后,我找到了解决方案。

    似乎 express 不喜欢为其他域设置 cookie,而不是它自己的域。这样做意味着它正在设置一个 3rd 方 cookie。

    我读到一些用户在同一台​​服务器上设置后端和前端来解决问题,但这并不适合我。

    此外,由于 herokuapp.com 已注册为公开,我们似乎无法为该域设置 cookie。 (但不要过多引用我的话,我在一些 git 问题上读过)

    我决定为每个应用程序创建自定义域(即 app.mycustomdomain.com 和 service.mycustomdomain.com',它们指向 heroku 的 DNS 服务器。

    这意味着我的两个应用程序现在共享同一个域,并且 cookie 设置立即生效(也通过将新域添加到 CORS)。

    在设置选项卡下的 Heroku Dashboard 上有设置自定义域的指南。

    我希望这可以比我搜索的日子更快地帮助人们。

    【讨论】:

      猜你喜欢
      • 2013-11-19
      • 1970-01-01
      • 2019-09-08
      • 1970-01-01
      • 2013-01-27
      • 2011-12-23
      • 2014-04-17
      • 2016-10-14
      • 2018-01-24
      相关资源
      最近更新 更多