0

理想情况下使用django-rest-framework-simplejwt身份验证类,当我错误地传递令牌时JWTAuthentication,API 应该给出。403

相反,当我发出 API 请求时,即使没有身份验证令牌,它也会成功执行。

这是一个虚拟 API,我担心身份验证应该起作用。

我的代码如下所示:

class ViewSet(viewsets.ModelViewSet):
    queryset = get_user_model().objects.all()
    serializer_class = SomeSerializer
    http_method_names = ("post", "patch")
    authentication_classes = (JWTAuthentication,)

当我调试时,我看到它正在执行 JWTAuthentication,它又返回 None。这是预期的,因为我没有在标头中传递令牌。

    def authenticate(self, request):
        header = self.get_header(request)
        if header is None:
            return None

现在我认为 View 应该给予 Permission Denied,这并没有发生。

无法理解这里缺少什么。

4

1 回答 1

2

如果您传递了错误的令牌,它将传递 401 状态响应。
但是,如果您没有在请求中放置授权标头,django 将不会返回 401 响应,并且会将请求视为AnonymousUser请求。如果您希望只有经过身份验证的用户可以访问您的ViewSet,您应该放入permission_classes = [IsAuthenticated,]您的ViewSet

IsAuthenticated权限类可以从rest_framework.permissions导入

于 2020-11-17T20:09:56.827 回答