Django Rest Framework 在编辑用户时返回 403 Forbidden,但在未以任何用户身份登录时有效

Django Rest Framework returning 403 Forbidden when editing user, but works when not logged in as any user

我正在尝试使用带有 React 前端的 Django Rest 对我的用户模型发出 PUT 请求以编辑用户名、简历等。

当我通过 django rest 客户端在 url 发出 PUT 请求时,它没有任何问题。从前端,当我没有登录任何 django 用户时,我可以通过 AXIOS 毫无问题地发送 PUT 请求。

一旦我登录到任何 django 用户,即使具有超级用户权限,我的 PUT 请求也会收到 403 禁止错误。

这是我的 views.py:

class RetrieveUpdateDestroyUser(RetrieveUpdateDestroyAPIView):

    serializer_class = UserCreateUpdateSerializer
    queryset = CustomUser.objects.all()
    lookup_field = 'id'
    permission_classes = (AllowAny,)

    def update(self, request, *args, **kwargs):
        """
        PUT and UPDATE requests handled by this method.
        """
        return super().update(request, *args, **kwargs)

在我的前端,这是我发出 PUT 请求的方式(使用 axios 完成请求):

export class UserProxy extends BackendProxy {

    updateUser(updatedUser, userID) {
  
        let parameters = `user/${userID}`
        return new Promise((resolve, reject) => {
            this.putRequest(updatedUser, parameters)
                .then(response => { resolve(response) })
                .catch(error => {
                    console.log(error)
                    reject(error)
                })
        });
    }
}

我很困惑为什么当我没有登录 django 用户时我没有收到 403 Forbidden,但是当我登录时我会收到。我正在使用 Python-Social-如果重要的话,还可以对登录进行身份验证。

谢谢!

如果您正在使用 SessionAuthentication,可能会导致这种情况。匿名用户在身份验证过程的早期获得“身份验证”。经过身份验证的用户会通过额外的 CSRF 检查。如果失败,将抛出 HTTP 403。

就我而言,我意识到我应该使用 GET,CSRF 不适用 (https://www.django-rest-framework.org/topics/ajax-csrf-cors/#csrf-protection)。