Django与Nuxt.js集成配置credentials:true后仍无法获取请求Cookie
问题根因及修复方案
Django侧配置修复
- 配置跨域参数
首先确保安装了django-cors-headers依赖,在settings.py中添加如下配置:
INSTALLED_APPS = [ # ... 其他原有配置 'corsheaders', ] MIDDLEWARE = [ # 放在最顶部,优先加载 'corsheaders.middleware.CorsMiddleware', # ... 其他原有中间件 'django.middleware.common.CommonMiddleware', ] # 跨域允许携带凭证 CORS_ALLOW_CREDENTIALS = True # 填写你Nuxt服务的实际访问地址,禁止使用*通配符 CORS_ALLOWED_ORIGINS = [ "http://localhost:3000", "http://127.0.0.1:3000", ] CSRF_TRUSTED_ORIGINS = CORS_ALLOWED_ORIGINS # 新增JWT认证配置 REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_simplejwt.authentication.JWTAuthentication', ), }
- 修正
set_cookie参数(如果你确实需要保留cookie逻辑的话)
跨域场景下缺省参数会导致浏览器拒绝种下cookie,修改login视图中的cookie设置逻辑:
response.set_cookie( 'username', username, max_age=7*24*3600, httponly=False, # 若前端不需要读取该cookie可设为True提升安全性 samesite='Lax', # 生产环境跨域可设为None,需同时搭配secure=True secure=False, # 本地http开发设为False,生产https环境设为True path='/' )
- 优化
userview冗余逻辑
你已经使用了IsAuthenticated权限类,JWT认证通过后request.user会直接返回当前登录用户,完全不需要读取cookie:
@api_view(['GET']) @permission_classes([IsAuthenticated]) def userview(request): serializers = UserSerializer(request.user) return Response({'user': serializers.data})
原逻辑中使用filter+many=True会返回用户数组,和Nuxt auth-next要求的单个用户结构不匹配,修正后即可正常解析用户数据。
Nuxt侧校验
确认以下配置无误即可:
- 你已经在axios配置中开启了
credentials: true,符合要求 - 确认Django侧
userview对应的路由路径和auth配置中endpoints.user.url的/user/完全匹配,没有拼写错误
内容的提问来源于stack exchange,提问作者Phan Quang Thang
相关产品推荐
相关产品推荐

