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

dj-rest-auth与simpleJWT基于Cookie授权问题:后端仍要求Bearer Token

解决方案

一、先检查并补充配置

你的现有配置已启用JWTCookieAuthentication,但可能缺少simpleJWT的关键配置,导致后端仍要求Bearer Token:

  1. 补充SIMPLE_JWT配置
    在settings.py中添加或修改:

    SIMPLE_JWT = {
        # 设为空元组,禁用Bearer头要求
        'AUTH_HEADER_TYPES': ('',),
        'USER_ID_FIELD': 'id',
        'USER_ID_CLAIM': 'user_id',
        # 可按需添加过期时间等其他配置
    }
    
  2. 确认Cookie名称一致性
    确保REST_AUTH['JWT_AUTH_COOKIE']的名称(my-auth)与后端Set-Cookie时的名称完全匹配,前端请求携带的Cookie也必须对应这个名称。

  3. 验证前端请求
    用浏览器开发者工具查看请求的Cookie头,确认my-auth确实被携带(跨域场景下,需确保后端CORS配置允许携带Cookie)。

二、自定义认证类(若上述配置无效)

如果JWTCookieAuthentication仍优先检查请求头,可自定义一个仅从Cookie获取Token的认证类:

  1. 在你的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'
    
  2. 在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 00:39:58