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

django-graphql-jwt配置JWT_COOKIE_SAMESITE不生效,React端无法获取JWT cookie

可行解决方案

1. 前端GraphQL客户端配置调整

跨域场景下GraphQL客户端默认不会携带、接收Cookie,需要显式开启凭证传递配置:

  • 若使用Apollo Client,初始化时添加credentials: "include"参数:
import { ApolloClient, InMemoryCache, createHttpLink } from '@apollo/client';

const httpLink = createHttpLink({
  uri: '你的Django GraphQL接口地址(如http://localhost:8000/graphql/)',
  credentials: 'include', // 必须添加该字段
});

const client = new ApolloClient({
  link: httpLink,
  cache: new InMemoryCache(),
});
  • 若使用urql,初始化时添加对应配置:
import { createClient } from 'urql';

const client = createClient({
  url: '你的Django GraphQL接口地址',
  fetchOptions: {
    credentials: 'include', // 必须添加该字段
  },
});

2. 后端CORS配置补全

你当前缺失跨域相关的必要配置,按以下步骤调整:

  1. 确保已安装django-cors-headers依赖
  2. 在settings.py中添加如下配置:
INSTALLED_APPS = [
    # 其他原有应用
    'corsheaders',
]

MIDDLEWARE = [
    # 放在中间件列表最顶部,优先级最高
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 其他原有中间件
]

# 显式指定允许的前端地址,禁止使用通配符*,否则会和凭证配置冲突
CORS_ALLOWED_ORIGINS = [
    "http://localhost:3000",
    "https://localhost:3000",
]
# 允许跨域传递Cookie
CORS_ALLOW_CREDENTIALS = True

3. 本地开发环境适配

你当前配置的*_COOKIE_SECURE = True要求Cookie仅能在HTTPS连接下传输,本地使用http://localhost:3000访问时会失效,本地开发阶段可临时调整为:

# 本地开发用该配置,线上部署时改回True即可
CSRF_COOKIE_SECURE = False
SESSION_COOKIE_SECURE = False
JWT_COOKIE_SECURE = False

如果需要保留HTTPS配置,给本地localhost配置自签名证书,前后端统一用HTTPS访问即可。

4. JWT Cookie写入开关检查

确认GRAPHQL_JWT配置中开启了Cookie返回逻辑:

GRAPHQL_JWT = {
    # 其他原有配置
    "JWT_COOKIE": True, # 开启JWT令牌通过Cookie返回
    "JWT_REFRESH_TOKEN_COOKIE": True, # 开启刷新令牌通过Cookie返回
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 03:18:01