Django Rest Framework 不接受 JWT 身份验证令牌

Posted

技术标签:

【中文标题】Django Rest Framework 不接受 JWT 身份验证令牌【英文标题】:Django Rest Framework not accepting JWT Authentication Token 【发布时间】:2021-05-22 20:44:21 【问题描述】:

我将Django Restful API Framework 与Simple JWT 一起使用,并成功创建了一个用于接收和刷新用户令牌的URL。 为了尝试使用令牌进行身份验证,我创建了一个视图,它简单地列出了数据库中的所有帖子。然后我将IsAuthenticated 类分配给视图。

正如预期的那样,我收到一条错误消息,指出未提供身份验证凭据。然后我继续使用 Postman 发出一个简单的GET 请求,并在“授权”选项卡中提供了身份验证令牌。类型设置为“Bear Token”。不幸的是,我仍然收到“未提供身份验证凭据”消息。带有 403 禁止代码。

我也试过在Headers中提供token,以及发出CURL请求,一切都无济于事。

我的观点是这样的:

class PostListView(generics.ListAPIView):
    permission_classes = (IsAuthenticated,)
    queryset = Post.objects.filter()

这是序列化程序:

class PostListSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = ('__all__')

Django项目的settings.py:

REST_FRAMEWORK = 
    'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'],
    'DEFAULT_PERMISSION_CLASSES': ['rest_framework.permissions.AllowAny'],
    'DEFAULT_AUTHENTICATION_CLASSES:': ('rest_framework_simplejwt.authentication.JWTAuthentication',)

CORS_ALLOW_ALL_ORIGINS = True  # For testing purposes

我在网上学习了几个不同的教程,阅读了许多帖子,并遵循了 Simple JWT 的官方文档。

【问题讨论】:

【参考方案1】:

您正在做的是尝试过滤数据,而您的基本目的只是列出您的模型。对于过滤,请确保您阅读文档DRF Filtering。

在您的代码中尝试这些更改。我希望它对你有用。

Settings.py

REST_FRAMEWORK = 
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ],

Views.py

class UserList(generics.ListAPIView):
    permission_classes = (IsAuthenticated,)
    queryset = Post.objects.all()
    serializer_class = PostListSerializer

在此之后尝试使用访问令牌访问您的 API。要了解有关通用视图的更多信息,您可以通过此链接Generic Views in DRF。

【讨论】:

我启用了过滤器,因为我在其他地方需要它。但据我了解,这应该与我的问题无关。不过,我尝试了您的建议并删除了这些行。不幸的是,没有任何结果,问题仍然存在。 你在 Apache 上运行 django 吗? 我目前正在尝试使用 Django 开发服务器在本地工作。

以上是关于Django Rest Framework 不接受 JWT 身份验证令牌的主要内容,如果未能解决你的问题,请参考以下文章

Django Rest Framework 将不接受我的 CSRF 令牌

django rest_framework--入门教程3

Django-Rest-Framework POST 对象字段必填

如何使用 django-rest-framework 测试客户端测试二进制文件上传?

如何在 Django Rest Framework 中处理并行请求?

为啥 django-rest-framework 不显示 OneToOneField 数据 - django