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

Django REST Framework用户Token认证失败问题求助

问题解决:Token认证返回"Authentication credentials were not provided"但request.user正确

核心问题分析

你遇到的矛盾点(能拿到request.user但request.auth为None)说明当前请求的用户身份是通过Session认证而非Token认证填充的,DRF的TokenAuthentication并未真正生效,所以才会返回凭证未提供的错误。

解决方案步骤

1. 修正Postman的Token传递方式

DRF的TokenAuthentication要求请求头格式必须为:

Authorization: Token <你的Token字符串>

你之前把Key设为"Token"、Value设为Token值的方式是错误的。正确操作:

  • 打开Postman的「Authorization」选项卡
  • 类型选择「API Key」,然后填写:
    • Key: Authorization
    • Value: Token 你的实际Token字符串
    • 选择「Header」位置
      或者直接在「Headers」标签页手动添加上述键值对。

2. 强制视图仅使用Token认证

如果系统同时支持Session和Token认证,DRF会按配置顺序优先使用Session认证(比如请求携带了浏览器Cookie)。可以在视图里指定仅启用Token认证,避免干扰:

class ReceiveMessagesView(viewsets.ModelViewSet):
    serializer_class = MessageSerializer
    permission_classes = [permissions.IsAuthenticated]
    authentication_classes = [TokenAuthentication]  # 新增该行,指定仅用Token认证
    http_method_names = ['get', 'post']

    def get_queryset(self):
        user = self.request.user
        queryset = Message.objects.filter(receiver=user)
        return queryset

3. 验证Token的有效性

检查数据库中的authtoken_token表(如果使用rest_framework.authtoken应用),确认:

  • 目标用户对应的Token记录存在
  • Postman中使用的Token字符串和数据库里的完全一致(注意大小写、无多余空格)

4. 排除中间件干扰

检查项目的MIDDLEWARE配置,确保没有自定义中间件修改或丢弃了Authorization请求头,导致DRF无法读取Token。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:30:57