在 DRF 中确定 IsAuthenticated 使用 DRF-JWT 检索使用 Postman 测试的列表

Posted

技术标签:

【中文标题】在 DRF 中确定 IsAuthenticated 使用 DRF-JWT 检索使用 Postman 测试的列表【英文标题】:Determining IsAuthenticated in DRF Using DRF-JWT to retrieve a list testing with Postman 【发布时间】:2018-04-12 01:39:16 【问题描述】:

所以我使用DRF JWT 进行身份验证。用户提交凭据,如果有效,则使用存储在 sessionStorage 中的 JWT 进行响应。每当用户浏览受保护的路由时,JWT /api/auth/refresh 都会刷新令牌(如果令牌仍然有效)。

无论如何,从身份验证转移到受保护的路由,根据 DRF,根据用户是否为IsAuthenticated 来检索数据。问题是我很难弄清楚如何在 DRF 中确定 IsAuthenticated 而无需用户再次提供凭据。我现在应该提到我正在使用 Postman 进行测试。

API 网址:

/api/help/questions

我的看法是:

class GetQuestionsAPIView(ListAPIView):
    queryset = Help.objects.all()
    serializer_class = GetQuestionsSerializer
    permission_classes = [IsAuthenticated,]

序列化器是:

class GetQuestionsSerializer(ModelSerializer):

    class Meta:
        model = Help
        fields = '__all__'

    def validate(self, data):
        return data

我有一个来自/api/auth/signin/ 的有效令牌。我正在尝试将其传递给/api/help/questions/ 路由以检索问题列表。

GET /api/help/questions/ 不起作用,因为它需要凭据。 Authentication credentials were not provided.

GET /api/help/questions/Content-type: application/json 和 'Authorizationand the token in the header also says未提供身份验证凭据。`

我认为可能应该是 POST,因为我提交了凭据,并且如果身份验证有效,我希望这些问题作为服务器响应,但结果几乎相同。

我显然不是这方面知识最渊博的人,因此我们将不胜感激。

【问题讨论】:

你在 django settings.py in DEFAULT_AUTHENTICATION_CLASSES 中定义了什么?也许添加一个失败的测试? 【参考方案1】:

您是否将令牌放入 Authorization 标头中? 所以在你登录后,你会得到一个令牌,你应该把它放在你的受保护 url 请求的标题中,如下所示:

Authorization: JWT <your_token>

这是一个使用curl的示例:

curl -H "Authorization: JWT <your_token>" http://localhost:8000/protected-url/

【讨论】:

天啊,这么简单。我确实在授权标头中有令牌,但在令牌之前没有JWT。谢谢!

以上是关于在 DRF 中确定 IsAuthenticated 使用 DRF-JWT 检索使用 Postman 测试的列表的主要内容,如果未能解决你的问题,请参考以下文章

在DRF中嵌套ViewSet路由

drf的权限扩充

06.drf(django)的权限

DRF JWT 在 OPTIONS 请求上不需要令牌

如何使用 django rest 框架禁用 HTML 错误页面的返回?

DRF的认证