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
相关产品推荐
相关产品推荐

