dj-rest-auth与simpleJWT基于Cookie授权问题:后端仍要求Bearer Token
解决方案
一、先检查并补充配置
你的现有配置已启用JWTCookieAuthentication,但可能缺少simpleJWT的关键配置,导致后端仍要求Bearer Token:
补充SIMPLE_JWT配置
在settings.py中添加或修改:SIMPLE_JWT = { # 设为空元组,禁用Bearer头要求 'AUTH_HEADER_TYPES': ('',), 'USER_ID_FIELD': 'id', 'USER_ID_CLAIM': 'user_id', # 可按需添加过期时间等其他配置 }确认Cookie名称一致性
确保REST_AUTH['JWT_AUTH_COOKIE']的名称(my-auth)与后端Set-Cookie时的名称完全匹配,前端请求携带的Cookie也必须对应这个名称。验证前端请求
用浏览器开发者工具查看请求的Cookie头,确认my-auth确实被携带(跨域场景下,需确保后端CORS配置允许携带Cookie)。
二、自定义认证类(若上述配置无效)
如果JWTCookieAuthentication仍优先检查请求头,可自定义一个仅从Cookie获取Token的认证类:
在你的Django应用中创建
authentication.py:from dj_rest_auth.jwt_auth import JWTCookieAuthentication class CookieOnlyJWTAuthentication(JWTCookieAuthentication): def get_raw_token(self, request): # 仅从指定Cookie读取Token,忽略请求头 return request.COOKIES.get(self.jwt_cookie_name) def authenticate_header(self, request): # 修改认证失败时的响应头,避免返回Bearer要求 return 'Cookie'在
settings.py中替换认证类:REST_FRAMEWORK['DEFAULT_AUTHENTICATION_CLASSES'] = [ 'your_app.authentication.CookieOnlyJWTAuthentication', ]
关键说明
JWTCookieAuthentication本身支持从Cookie取Token,但默认会先检查请求头的Bearer Token,若无则读取Cookie。- 设置
SIMPLE_JWT['AUTH_HEADER_TYPES'] = ('',)可让后端不再强制要求请求头携带Bearer Token。
内容的提问来源于stack exchange,提问作者DonPA
相关产品推荐
相关产品推荐

