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

Django REST Framework创建用户的POST请求要求身份认证问题排查

问题原因

你为UserViewSet全局配置了IsAuthenticated权限规则,要求该视图下所有接口必须携带有效身份凭证才能访问,而创建新用户的注册接口本身是给未登录用户使用的,请求时自然没有认证凭证,因此被权限拦截返回报错。

解决方案

重写视图集的get_permissions方法,针对不同的接口动作配置不同的权限规则,仅放开用户创建(注册)动作的权限限制即可,其余接口保持原有校验逻辑。

修改后的views.py代码如下:

from rest_framework.permissions import AllowAny

class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

    permission_classes = [IsAuthenticated, IsOwnerOfObject]
    authentication_classes = (TokenAuthentication,)

    def get_permissions(self):
        # 仅创建用户动作允许匿名访问
        if self.action == 'create':
            return [AllowAny()]
        # 其余动作沿用原有权限配置
        return super().get_permissions()

如果后续有其他需要公开访问的动作,也可以在判断条件中添加,示例:

def get_permissions(self):
    # 允许匿名访问的动作列表
    public_actions = ['create', 'retrieve']
    if self.action in public_actions:
        return [AllowAny()]
    return super().get_permissions()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:45:04