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

Django Rest-framework JWT认证获取用户信息报'authenticate'属性不存在如何解决

问题根源

你混淆了 Django REST Framework 中两个配置项的作用:

  • authentication_classes 是认证类配置项,用于指定校验用户身份的逻辑类,执行时会调用类的authenticate方法
  • IsAuthenticated 属于权限控制类,作用是判断已经完成身份校验的用户是否有访问接口的权限,本身没有authenticate方法
    你把权限类错放到了认证类的配置数组里,所以触发了属性不存在的报错。
修复方案

两种修改方式二选一即可:

方式1:仅为当前ViewSet配置权限(推荐,灵活度更高)

将UserViewSet中的authentication_classes修改为permission_classes即可:

class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer 
    # 将原authentication_classes替换为permission_classes
    permission_classes = [IsAuthenticated,]

你已经在全局配置了默认的JWT认证类,所以ViewSet不需要重复配置认证类。

方式2:全局配置默认权限规则

如果你的项目所有接口都需要登录后才能访问,可以直接在全局REST_FRAMEWORK配置中增加默认权限规则,不需要每个ViewSet单独配置:

REST_FRAMEWORK = {
    'NONE_FIELD_ERRORS_KEY':'error',
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ),
    # 新增默认权限配置
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ]
}

这种配置下UserViewSet不需要单独加任何认证、权限相关的配置也会自动生效。

接口测试注意事项

Postman请求接口时,需要在请求头中携带认证信息:

  • 请求头key:Authorization
  • 请求头value:Bearer <你登录接口返回的access_token值>

内容的提问来源于stack exchange,提问作者Chen Triều

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:36:03