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
导入
理想情况下使用 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