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

Djoser UserViewSet的list接口返回401未授权问题求助

分析api/v1/users/ GET接口401 Unauthorized错误原因及解决办法

核心原因分析

1. 全局权限策略强制要求认证

你的config.settings.py中,REST Framework的全局权限配置默认要求所有接口必须是已认证用户才能访问:

REST_FRAMEWORK = {
    "DEFAULT_PERMISSION_CLASSES": ["rest_framework.permissions.IsAuthenticated"],
    # ...其他配置
}

这个配置会作用于所有未单独指定权限的视图,包括你定义的UserCreateView的list方法。

2. 视图未单独开放匿名访问权限

UserCreateView继承自Djoser的UserViewSet,而Djoser的UserViewSet默认继承全局权限策略,没有为list方法单独设置允许匿名访问的权限。你只重写了create方法,没有修改list方法的权限控制。

3. 请求未携带有效认证凭证

如果你本就打算让该接口需要认证后访问,那401错误的直接原因就是Postman请求时没有正确携带Token:

  • 未在请求头中添加Authorization字段,格式应为Token <你的认证Token>
  • 使用的Token无效、过期,或者属于未激活的用户

针对性解决办法

场景一:允许匿名用户访问用户列表

如果需要开放这个接口给未登录用户,有两种常用方式:

方式1:在视图中为list方法单独设置权限

修改accounts.views.py中的UserCreateView,添加权限配置:

from rest_framework.permissions import AllowAny

class UserCreateView(UserViewSet):
    serializer_class = UserCreateSerializer
    # 为list方法单独设置允许匿名访问
    def get_permissions(self):
        if self.action == 'list':
            return [AllowAny()]
        return super().get_permissions()

    # ...你的create方法代码

方式2:在URL配置中指定权限

修改config.urls.py的URL路径,直接添加权限类:

from rest_framework.permissions import AllowAny
from rest_framework.decorators import permission_classes

urlpatterns = [
    path(
        "api/v1/users/", 
        permission_classes([AllowAny()])(UserCreateView.as_view({"get": "list"})), 
        name="user-create"
    ),
    # ...其他URL
]

场景二:保持接口需要认证访问

如果这个接口本就应该只对已登录用户开放,需要完成以下步骤:

  1. 获取认证Token:调用Djoser的登录接口POST api/v1/auth/token/login/,传入用户的email和password,接口会返回auth_token字段。
  2. 在Postman中添加认证头:在请求的Headers中添加键值对:
    • 键:Authorization
    • 值:Token <获取到的auth_token值>

额外代码问题提示

你的UserCreateView的create方法最后一行存在变量未定义问题:

return Response(data, status=status.HTTP_201_CREATED)

这里的data没有被定义,建议修改为返回用户序列化数据或者自定义响应内容,比如:

return Response(user_serializer.data, status=status.HTTP_201_CREATED)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:19:53