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

Django Token认证返回“Authentication credentials were not provided”问题求助

Django REST Token认证失败问题解决方法

你遇到的核心问题是Django REST框架默认的TokenAuthentication不识别Bearer格式的认证头,导致请求无法通过认证,request.user被设为匿名用户,进而触发后续错误。以下是具体解决方法:

方法1:使用Token认证头格式(最快解决)

Django REST的TokenAuthentication默认只接受Token <你的token值>这种格式的Authorization头,而非Bearer。在Postman中调整如下:

  • 打开Authorization选项卡
  • 认证类型选择Token(不是Bearer Token)
  • 在Token输入框中填入你的token(比如xxyyzz)

或者手动设置请求头:

Authorization: Token xxyyzz

方法2:自定义认证类支持Bearer格式

如果一定要用Bearer前缀,可自定义认证类兼容该格式:

# 在你的app中新建authentication.py,或直接写在views.py内
from rest_framework.authentication import TokenAuthentication

class BearerTokenAuthentication(TokenAuthentication):
    # 将默认的认证标识从'Token'改为'Bearer'
    keyword = 'Bearer'

然后修改视图的认证类配置:

class EventGetCreate(APIView):
    # 替换为自定义的认证类
    authentication_classes = (BearerTokenAuthentication,)
    permission_classes = (IsAuthenticated,)

    def get(self, request):
        created_user = request.user
        events = Event.objects.filter(creator=created_user)
        serializer = EventSummary(events, many=True)
        return Response(serializer.data)

额外检查项

  • 确认Token模型已正确生成:运行过python manage.py migrate(rest_framework.authtoken会自动创建Token数据表)
  • 确保获取token时使用的用户,与请求事件列表的用户一致,避免token和用户不匹配
  • 若想让所有视图默认支持Token认证,可在settings.py中全局配置:
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
        # 或你自定义的BearerTokenAuthentication
    ],
}

错误原因说明

当你用Bearer头请求时,默认的TokenAuthentication无法识别该认证方式,不会将request.user设置为登录用户,导致:

  • 开启IsAuthenticated权限时,直接返回"Authentication credentials were not provided"
  • 关闭权限后,request.user是AnonymousUser,用它过滤Event表的creator字段(需要用户ID),就会触发"Field 'id' expected a number but got AnonymousUser"的类型错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 07:05:05