gpt4 book ai didi

django-restframework-jwt 在使用 JWT token 时要求输入用户名/密码

转载 作者:行者123 更新时间:2023-12-04 13:46:36 25 4
gpt4 key购买 nike

我正在使用 Django rest framework-JWT 进行身份验证来处理 protected url,我正在尝试使用 IsAutchinted 保护 UserDetail View 。来自rest框架的类,但是每次我尝试发送生成的 token 时,我都会收到以下响应

{
"username": [
"This field is required."
],
"password": [
"This field is required."
]
}

我已经包含了 Authorization header ,并且在我的 header 前缀中设置为“JWT”
curl -H "Authorization: JWT <token>" -X PUT  http://localhost:8000/user/3/ -d '{"first_name":"curl_test"}'

获取 JWT token 、刷新、验证 url 工作正常并生成链接,我只是无法让 JWT 使用 token 而不是用户名和密码来验证用户名和密码。

这是我对用户详细信息的看法
class UserDetail(APIView):
permission_classes = (IsOwner, IsAuthenticated)
"""
Retrieve, update or delete a user instance.
"""

def get_object(self, pk):
try:
return User.objects.get(pk=pk)
except User.DoesNotExist:
raise Http404


def get(self, request, pk, format=None):
user = self.get_object(pk)
serializer = UserSerializer(user)
return Response(serializer.data)

def put(self, request, pk, format=None):
user = self.get_object(pk)
serializer = UserSerializer(user, data=request.data)
if serializer.is_valid():
serializer.save()
user = Profile.objects.get(id=pk)
user.profile.updated = timezone.now()
user.save()
return Response(serializer.data, status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

def delete(self, request, pk, format=None):
user = self.get_object(pk)
user.delete()
return Response(status=status.HTTP_204_NO_CONTENT)

我究竟做错了什么?为什么即使 token 包含在 header 中,它仍然要求输入用户名和密码?

我做 IsAutchinted 类(class)的方式正确吗?或者这可能是 JWT 无法正常工作的原因,因为我正在使用其余框架权限类?

更新:我的 settings.py
REST_FRAMEWORK = {

'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',

),
'DEFAULT_PARSER_CLASSES': (
'rest_framework.parsers.FormParser',
'rest_framework.parsers.MultiPartParser',
'rest_framework.parsers.JSONParser',

)
}

最佳答案

更新模型部分需要您使用 partial创建 Serializer 对象时的属性,如下所示。

serializer = UserSerializer(user, data=request.data, partial=True)

错误消息绝对不是来自 restframework-jwt 库,因为它应该是一条类似 Invalid username/password. 的消息。

关于django-restframework-jwt 在使用 JWT token 时要求输入用户名/密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46245014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com