Wil*_*ard 3 cookies httponly cross-domain nestjs samesite
我有一个 NestJs 应用程序,它使用 HttpOnly cookie 进行身份验证。在开发过程中一切都很完美。我的 NextJs 客户端 (http://localhost:4200) 使用 Graphql 向我的 NestJs 服务器 (http://localhost:3333) 发送登录请求,该服务器在响应中设置 httpOnly cookie,然后客户端成功将 cookie 添加到浏览器存储。
但是,当我将这两个应用程序部署到 Render.com 时,除了最后一步之外,一切都正常。响应中已成功接收 cookie,但未将其添加到浏览器存储中。有趣的是,如果我使用已部署生产服务器的 GraphQL 游乐场来发出登录请求,则一切正常。因此,显然,问题似乎是请求来自子域。
我的生产配置:
客户端: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
Run Code Online (Sandbox Code Playgroud)
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']
}
Run Code Online (Sandbox Code Playgroud)
相关 Nest main.ts 配置(服务器):
app.set('trust proxy', 1);
Run Code Online (Sandbox Code Playgroud)
graphql-请求设置(客户端):
credentials: 'include'
Run Code Online (Sandbox Code Playgroud)
我花了几天时间试图解决这个问题,所以任何帮助将非常感激!
Wil*_*ard 12
与 Render.com 支持人员交谈后,他们告诉我onrender.com(其子域的域)位于公共后缀列表中,这意味着跨站点 cookie 不起作用。解决方案是为两个 Web 服务添加自定义域(显然必须相同,例如 app.my-custom-domain.com 和 api.my-custom-domain.com)。我这样做了,现在一切都按预期进行了!
| 归档时间: |
|
| 查看次数: |
3203 次 |
| 最近记录: |