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

使用Django REST Framework开发API遇认证凭证未提供错误求助

解决DRF中"Authentication credentials were not provided"错误

核心问题:认证机制不匹配

你使用rest_framework_simplejwt生成JWT令牌,但配置和视图中用的是DRF自带的TokenAuthentication,两类认证体系不兼容,导致令牌无法被识别。


1. 修正全局认证类配置

将settings.py中的DEFAULT_AUTHENTICATION_CLASSES替换为simplejwt的JWT认证类:

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': [
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
    ],
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_simplejwt.authentication.JWTAuthentication',  # 替换为JWT认证类
    ],
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ]
}

2. 修正视图的认证装饰器

视图中也要同步替换认证类,确保和全局配置一致:

from rest_framework_simplejwt.authentication import JWTAuthentication  # 导入正确的认证类

@api_view(['GET'])
@authentication_classes([JWTAuthentication])
@permission_classes([IsAuthenticated])
def get_all_messages(request, user_id):
    messages = Message.objects.filter(receiver_id=user_id)
    serializer = MessageSerializer(messages, many=True)
    return Response(serializer.data)

3. 确认请求时的Token携带格式

获取到JWT的access令牌后,必须在请求头中按以下格式携带:

Authorization: Bearer <你的access令牌>

注意Bearer和令牌之间必须有一个空格,不能省略。

4. 额外检查项

  • 确保使用的是access令牌,refresh令牌仅用于刷新access令牌,不能直接用于接口认证
  • 检查令牌是否过期:simplejwt默认access令牌有效期为5分钟,过期需重新获取或用refresh令牌刷新

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 06:32:12