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

如何通过axios发送HttpOnly Cookie?Django+CRAO场景下请求不携带Cookie问题

问题解决方案

你遇到的问题核心是两个规则限制叠加导致的,按以下步骤修正即可解决:

  • 修正HttpOnly Cookie的设置逻辑
    HttpOnly是浏览器专门为防范XSS窃取而设计的Cookie属性,规则明确禁止前端JavaScript读写该类Cookie,因此你无法通过前端的document.cookie设置带HttpOnly属性的Cookie,浏览器会直接忽略代码里的HttpOnly参数,导致Cookie设置不符合预期。
    正确做法是把刷新令牌的设置逻辑移到Django后端,在登录接口的HTTP响应中通过Set-Cookie头返回刷新令牌,Django示例代码如下:
    from django.http import JsonResponse
    
    def login(request):
        # 账号密码验证、令牌生成逻辑省略
        refresh_token = "生成的有效刷新令牌"
        response = JsonResponse({"access_token": "生成的短期访问令牌"})
        response.set_cookie(
            key="refresh",
            value=refresh_token,
            httponly=True,
            samesite="Strict",
            path="/api/token/refresh/",
            secure=request.is_secure() # HTTPS生产环境必须设为True
        )
        return response
    
  • 修正axios的withCredentials配置位置
    axios.post的参数顺序为axios.post(url, 请求体, 配置项),你当前把withCredentials放在第二个参数的位置,会被axios当成请求体发送给后端,不会作为请求配置生效,因此跨域场景下不会携带Cookie。正确写法如下:
    // 无额外请求体的场景,第二个参数传空对象,配置项放在第三个参数位置
    const response = await axios.post('/api/token/refresh/', {}, { withCredentials: true });
    
    也可以全局配置axios默认开启携带凭证,避免每次请求单独配置:
    axios.defaults.withCredentials = true;
    
  • 检查Django跨域配置(前后端端口/域名不一致时必须配置)
    1. 安装django-cors-headers依赖
    2. 在项目settings.py中添加如下配置:
    INSTALLED_APPS = [
        # 其他原有应用
        'corsheaders',
    ]
    
    MIDDLEWARE = [
        # 放在中间件列表最顶部
        'corsheaders.middleware.CorsMiddleware',
        # 其他原有中间件
    ]
    
    # 允许前端请求携带Cookie
    CORS_ALLOW_CREDENTIALS = True
    # 替换为你的前端实际访问地址,禁止使用通配符*
    CORS_ALLOWED_ORIGINS = [
        "http://localhost:3000",
        # 生产环境前端域名
    ]
    # 同步添加前端地址到CSRF信任列表
    CSRF_TRUSTED_ORIGINS = CORS_ALLOWED_ORIGINS
    
  • 生产环境额外检查:如果站点采用HTTPS部署,必须给Cookie加上Secure属性,否则部分高版本浏览器会拦截非HTTPS传输的SameSite=Strict类型Cookie。

内容的提问来源于stack exchange,提问作者honter safioun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:27:03