本地跨域场景下NestJs后端与Angular前端交互时Cookie无法在浏览器中设置的问题求助
我现在碰到个特别头疼的问题,试了好几种网上说的解决方案,愣是没搞定。情况是这样的:
我的后端用NestJs写的,跑在localhost:3000;前端是Angular项目,跑在localhost:4200,属于本地跨域的场景。
为了排查问题,我已经把后端的Cookie权限开得非常宽松了,配置如下:
MAX_AGE_ACCESS_TOKEN=432000000 # 5 days MAX_AGE_REFRESH_TOKEN=1728000000 # 20 days HTTP_ONLY=false SECURE=false SAME_SITE='none'
同时我也在后端开启了CORS,特意设置了允许凭证、暴露Set-Cookie头等相关配置,代码是这样的:
app.enableCors({ origin: 'http://localhost:4200', methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'], allowedHeaders: [ 'Origin', 'Access-Control-Allow-Origin', 'Content-Type', 'Accept', 'Jwt-Token', 'Authorization', 'Origin', 'Accept', 'X-Requested-With', 'Access-Control-Request-Method', 'Access-Control-Request-Headers', ], exposedHeaders: [ 'Origin', 'Content-Type', 'Accept', 'Jwt-Token', 'Authorization', 'Access-Control-Allow-Origin', 'Access-Control-Allow-Credentials', 'Set-Cookie', ], credentials: true, });
现在的问题是:当我发起登录请求后,在Chrome开发者工具的Network标签里能清楚看到响应头里有Set-Cookie字段,包含access和refresh两个令牌,但切换到Application标签的Cookies列表时,localhost:4200下面完全没有任何Cookie。
前端发起登出请求时,我已经按照要求设置了withCredentials: true,代码如下:
logout() { return this.http.get(`${API_URL}/auth/logout`, { withCredentials: true }); }
但结果还是返回未授权错误,原因很明显——浏览器里根本没存储对应的Cookie,Angular自然没办法携带这些凭证到后端。
到底哪里出问题了?我是不是漏掉了什么关键配置?
备注:内容来源于stack exchange,提问作者derstauner
相关产品推荐
相关产品推荐

