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

Django REST Framework中Token认证失效问题求助

问题诊断与解决方案

哦,我一眼就看到问题所在了!你用的@login_required是Django原生的登录装饰器,它和DRF的Token认证根本不兼容——这个装饰器只认Session认证,完全无视请求头里的Token,所以才会把你跳转到登录表单页面,根本没机会执行后面的视图逻辑。

具体修复步骤

1. 移除@login_required装饰器

DRF已经通过settings.py里的DEFAULT_PERMISSION_CLASSES = ('rest_framework.permissions.IsAuthenticated',)全局设置了权限校验,不需要再叠加Django原生的登录装饰器。移除它之后,DRF会自动用你配置的Token认证来校验请求。

2. 改用DRF标准视图(推荐优化)

你的视图是用普通Django视图写的,虽然能运行,但更推荐用DRF提供的@api_view装饰器或者APIView类,这样能更好地利用DRF的功能:自动处理请求解析、响应格式化,还能省去手动加@csrf_exempt的麻烦(DRF对非Session认证的请求会自动跳过CSRF校验)。

修改后的views.py示例:

from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response

@api_view(['GET', 'POST'])
@permission_classes([IsAuthenticated])
def ui_list(request):
    print(request.headers)
    """ List all code user_informations, or create a new user_information. """
    if request.method == "GET":
        users = UserInformation.objects.all()
        serializer = UserInformationSerializer(users, many=True)
        return Response(serializer.data)
    elif request.method == "POST":
        serializer = UserInformationSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=201)
        return Response(serializer.errors, status=400)

3. 确认配置有效性

你当前的settings.py里DRF配置是正确的,不需要修改:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.TokenAuthentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    )
}

这个配置会让DRF优先尝试Token认证,完全匹配你的需求。

补充说明

之前请求头里明明有Token却失效,核心原因是@login_required在DRF的认证逻辑之前就拦截了请求——它只检查request.user是否通过Django Session认证,完全忽略了请求头里的Token。移除这个装饰器后,DRF的认证中间件才会读取Token并验证用户身份,自然就能返回你想要的REST数据了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:23:07