You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地跨域场景下NestJs后端与Angular前端交互时Cookie无法在浏览器中设置的问题求助

本地跨域场景下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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 09:49:37