check_password() returning False



我用自己的密码字段制作了一个模型。这与User对象完全分开。我为此使用django.contrib.auth.hashers库。

在此模型的创建方法中(覆盖通用的创建列表 API 视图(

def create(self, request, *args, **kwargs):
data = request.data
data['password'] = make_password(data['password'])
serializer = self.get_serializer(data=data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)

这会按预期在我的数据库中存储一个散列密码,但是当我尝试使用密码进行身份验证时

def get_object(self):
queryset = self.filter_queryset(self.get_queryset())
try:
# Grabs the 'name' parameter from the URL
obj = queryset.get(name=self.kwargs['name'])
except Group.DoesNotExist:
raise Http404
print(self.request.data['password'])  # raw password string
print(obj.password)  # encoded password from database
if check_password(self.request.data['password']), obj.password):
raise Http404
obj.user_set.add(self.request.user)
self.check_object_permissions(self.request, obj)
return obj

check_password返回False.但是,将编码的密码作为原始字符串密码传递是有效的。因此,散列密码有效,但不会在事后将原始密码与其进行比较。

if not check_password(self.request.data['password'], obj.password):
raise Http404

将行更改为上面的代码

最新更新