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
相关产品推荐
相关产品推荐

