我有一个NestJ应用程序,它使用HttpOnly cookie进行身份验证。在发展过程中,一切都是完美的。我的NextJs客户端(http://localhost:4200)使用Graphql向我的NestJs服务器(http://localhost:3333)发送登录请求,该服务器在响应中设置httpOnly cookie,然后客户端成功地将cookie添加到浏览器存储中。
然而,当我将这两个应用程序部署到Render.com上时,除了最后一步之外,一切都正常工作。cookies在响应中成功接收,但未添加到浏览器存储中。有趣的是,如果我使用已部署的生产服务器的GraphQL操场来发出登录请求,一切都会正常工作。因此,很明显,问题似乎是请求来自子域。
我的生产配置:
客户端:https://swingapple-web-staging.onrender.com
服务器:https://swingapple-api-staging.onrender.com
烹饪设置(服务器):
sameSite: process.env.NODE_ENV === 'production' ? 'none' : 'lax',
secure: process.env.NODE_ENV === 'production',
domain: process.env.NODE_ENV === 'production' ? '.onrender.com' : undefinedNestjs的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']
}相关main.ts配置(服务器):
app.set('trust proxy', 1);图形库-请求设置(客户端):
credentials: 'include'我花了好几天的时间想办法解决这个问题,所以任何帮助都是非常感谢的!
发布于 2022-04-15 23:30:56
在与Render.com支持部门交谈后,他们告诉我,onrender.com (其子域的域)在公共后缀列表中,这意味着跨站点cookie无法工作。解决方案是为两个Web服务添加一个自定义域(这显然必须是相同的,例如app.my-custom-domain.com和api.my-custom-domain.com)。我这么做了,现在一切都如愿以偿了!
https://stackoverflow.com/questions/71889130
复制相似问题