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配置补全
你当前缺失跨域相关的必要配置,按以下步骤调整:
- 确保已安装
django-cors-headers依赖 - 在
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
相关产品推荐
相关产品推荐

