在 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
,因为我提交了凭据,并且如果身份验证有效,我希望这些问题作为服务器响应,但结果几乎相同。
我显然不是这方面知识最渊博的人,因此我们将不胜感激。
【问题讨论】:
你在 djangosettings.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 测试的列表的主要内容,如果未能解决你的问题,请参考以下文章