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

Django Rest-Auth调用/rest-auth/user接口提示未提供认证凭证求助

解决Django REST Framework JWT认证在Postman中无法访问/rest-auth/user的问题

你遇到的核心问题其实是请求头的认证 scheme 不匹配——你用了DRF原生Token认证的格式,但JWT认证需要对应的专属前缀。

直接解决步骤

  1. 修改Postman的Authorization请求头格式
    你当前写的是:

    "Authorization": "Token ahagjbeghq7hbcvgqhvwqu08hevug.jwhhwiiwhw"
    

    改成rest_framework_jwt默认要求的格式:

    "Authorization": "JWT ahagjbeghq7hbcvgqhvwqu08hevug.jwhhwiiwhw"
    

    原因很简单:Token是给rest_framework.authentication.TokenAuthentication用的(它依赖DRF自带的Token模型生成的令牌),而你的JWT令牌需要用JWT作为前缀,才能被JSONWebTokenAuthentication识别。

  2. 适配自定义JWT配置(如果有)
    如果你在settings.py里自定义过JWT的头前缀,比如:

    JWT_AUTH = {
        'JWT_AUTH_HEADER_PREFIX': 'Bearer',
    }
    

    那就要把请求头改成Authorization: Bearer <你的JWT令牌>,和配置保持一致。

问题根源拆解

  • 你的DEFAULT_AUTHENTICATION_CLASSES里JSONWebTokenAuthentication排在第一位,DRF会优先用它验证请求。当你用Token前缀时,JWT认证类无法识别,会直接跳过;接着TokenAuthentication尝试验证,但你的令牌是JWT格式,不是DRF Token模型生成的,自然验证失败;最后就返回了"Authentication credentials were not provided"。
  • 而/api-token-verify端点不需要Authorization头,只要把JWT令牌放在请求体里(比如{"token": "你的JWT令牌"})就能验证,所以它能正常工作。

额外排查小技巧

  • 检查请求头是否有拼写错误,比如Authorization有没有写错,或者前缀和令牌之间的空格是否正确。
  • 可以在UserDetailsView里临时加一行调试代码,确认Postman的请求头是否正确传到后端:
    print(request.META.get('HTTP_AUTHORIZATION'))
    
    看输出是否和你设置的一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:59:45