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

dj-rest-auth配置JWT后/token/refresh无法设置Cookie求助

问题分析与解决办法

核心原因

/token/refresh/是simple-jwt原生的接口,而/dj-rest-auth/login/是dj-rest-auth封装后的接口——两者处理Cookie的逻辑不互通。你配置的JWT_AUTH_COOKIE这类参数是给dj-rest-auth用的,simple-jwt原生接口不认这些配置,自然不会帮你设置Cookie。

具体修复步骤

1. 换用dj-rest-auth封装的刷新接口

别用simple-jwt自带的/token/refresh/,改用dj-rest-auth提供的/dj-rest-auth/token/refresh/接口。这个接口会自动读取你配置的Cookie参数,帮你设置刷新Token的Cookie。

修改urls.py,确保包含完整的dj-rest-auth路由:

from django.urls import path, include

urlpatterns = [
    # 其他路由
    path('dj-rest-auth/', include('dj_rest_auth.urls')),
    # 要是用到注册功能,再加下面这条
    path('dj-rest-auth/registration/', include('dj_rest_auth.registration.urls')),
]

2. 检查中间件顺序

MoveJWTRefreshCookieIntoTheBody中间件的位置不能乱,必须放在AuthenticationMiddleware之后、CsrfViewMiddleware之后。给你个正确的settings.py中间件配置参考:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    # 把这个中间件放在这里
    'dj_rest_auth.jwt_auth.MoveJWTRefreshCookieIntoTheBody',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

3. 补全JWT相关配置

确保settings.py里的JWT配置没缺项:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'dj_rest_auth.jwt_auth.JWTCookieAuthentication',
    ),
}

REST_USE_JWT = True
JWT_AUTH_COOKIE = 'my-app-auth'
JWT_AUTH_REFRESH_COOKIE = 'my-refresh-token'
# 要是跨域场景,得加这个,配合HTTPS的话可以设为'None'
JWT_AUTH_SAMESITE = 'Lax'

4. 清缓存测试

有时候浏览器会缓存旧的响应头,导致看不到新Cookie。开无痕模式测,或者手动清一下对应域名的Cookie再试。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 05:25:42