gpt4 book ai didi

cookies - Render.com : HttpOnly Cookie not being set in browser storage when doing res. Web 服务之间的 cookie

转载 作者:行者123 更新时间:2023-12-05 00:51:28 25 4
gpt4 key购买 nike

我有一个使用 HttpOnly cookie 进行身份验证的 NestJs 应用程序。在开发中,一切都完美无缺。我的 NextJs 客户端(http://localhost:4200)使用 Graphql 向我的 NestJs 服务器(http://localhost:3333)发送登录请求,它在响应中设置了 httpOnly cookie,然后客户端成功将 cookie 添加到浏览器存储。

但是,当我将这两个应用程序都部署到 Render.com 时,除了最后一步之外,一切正常。 cookie 在响应中成功接收,但不会添加到浏览器存储中。有趣的是,如果我使用已部署的生产服务器的 GraphQL Playground 发出登录请求,一切正常。因此,很明显,问题似乎是请求来自子域。

我的生产配置:

客户:https://swingapple-web-staging.onrender.com
服务器:https://swingapple-api-staging.onrender.com

Cookie 设置(服务器):

sameSite: process.env.NODE_ENV === 'production' ? 'none' : 'lax',
secure: process.env.NODE_ENV === 'production',
domain: process.env.NODE_ENV === 'production' ? '.onrender.com' : undefined

Nestjs 的 GraphQLModule 设置(服务器):

playground: true,
introspection: true,
autoSchemaFile: true,
sortSchema: true,
context: ({ req, res }) => ({ req, res }),
cors: {
credentials: true,
origin: [process.env.CLIENT_URL, 'http://localhost:4200']
}

相关 Nest main.ts 配置(服务器):

app.set('trust proxy', 1);

graphql-request 设置(客户端):

credentials: 'include'

我已经花了几天的时间试图解决这个问题,所以任何帮助都将不胜感激!

最佳答案

在与 Render.com 支持人员交谈后,他们告诉我 onrender.com(其子域的域)在公共(public)后缀列表中,这意味着跨站点 cookie 将不起作用。解决方案是为两个 Web 服务添加一个自定义域(显然必须相同,例如 app.my-custom-domain.com 和 api.my-custom-domain.com)。我这样做了,现在一切都按预期工作了!

关于cookies - Render.com : HttpOnly Cookie not being set in browser storage when doing res. Web 服务之间的 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71889130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com