DRF django-rest-framework-simplejwt JWTAuthentication 不工作

DRF django-rest-framework-simplejwt JWTAuthentication not working

理想情况下使用 django-rest-framework-simplejwt 和身份验证 class 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,这反过来 returns None。 这是预期的,因为我没有在 header.

中传递令牌
    def authenticate(self, request):
        header = self.get_header(request)
        if header is None:
            return None

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

无法理解此处缺少的内容。

如果您传递了不正确的令牌,它将传递 401 状态响应。
但是如果你没有在你的请求上放置授权 header,django 将不会 return 401 响应并且将请求作为 AnonymousUser 请求。 如果您希望只有经过身份验证的用户才能访问您的 ViewSet,您应该将 permission_classes = [IsAuthenticated,] 放入 ViewSet.

IsAuthenticated 权限 class 可以从 rest_framework.permissions

导入