【问题标题】:Cookie sent to localhost but not to https domainCookie 发送到 localhost 但不发送到 https 域
【发布时间】:2021-08-08 13:10:58
【问题描述】:

我在 Netlify 上部署了一个带有自定义 https 域的 react 应用,以及一个在 Heroku 上部署的 node/express 应用(免费计划,无自定义域)。

所有不受保护的路由都有效。但是,我无法访问受保护的路由,因为前端永远不会发送 auth cookie。为何如此?因为服务器没有正确发送cookie!

以下是 cookie 的发送方式:

 return res
      .status(200)
      .cookie("myApp", token, {
        expires: new Date(Date.now() + msPerDay * 14),
        httpOnly: true,
        secure: true,
      })
      .json({ user });

index.js 是:

app.use(cors({ credentials: true, origin: [process.env.CLIENT as string] }));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(compression());
app.use(cookieParser());

在 chrome 的应用程序选项卡中,我可以看到没有设置 cookie。但是,它在localhost中正确填写!

如何解决这个问题?如果您需要更多代码,我很乐意提供,但我不知道问题是来自代码本身还是 heroku 和我的 netlify 域之间的网络问题......客户端当然被 cors 列入白名单。

【问题讨论】:

  • 我认为你需要使用sameSite: "lax"

标签: node.js express heroku netlify cookie-httponly


【解决方案1】:

遇到同样的问题,我通过在 cors 中添加 exposedHeaders: ["set-cookie"] 这个选项解决了这个问题

【讨论】:

  • “lax”不是 cookie 的默认值吗? developer.mozilla.org/fr/docs/Web/HTTP/Headers/Set-Cookie/…
  • 哎呀!抱歉,我遇到了同样的问题,我通过在 cors 中添加 exposedHeaders: ["set-cookie"] 这个选项解决了这个问题
  • 好的,cookie 现在出现在响应中(检查网络选项卡 -> cookie),但从未存储在应用程序 -> cookie 中。所以我一直被禁止访问我的私人路线。
  • 你检查私有路由了吗
  • 问题不是来自私有路由。在授予对这些路由的访问权限之前,有一个身份验证中间件会检查 cookie。问题是这个中间件永远不会收到 cookie。我可以看到 cookie 已正确发送,但它从未存储在浏览器 cookie 中(我已允许它们)。所以我做的任何 api 调用都不会附加 cookie。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 2021-03-05
  • 1970-01-01
  • 1970-01-01
  • 2011-03-15
  • 1970-01-01
相关资源
最近更新 更多