check_password () возвращает False - PullRequest
       25

check_password () возвращает False

0 голосов
/ 25 сентября 2018

Я сделал модель с собственным полем пароля.Это полностью отделено от объекта User.Для этого я использую библиотеку django.contrib.auth.hashers.

В методе создания для этой модели (перезаписываем универсальное представление CreateListAPI)

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.Тем не менее, передача закодированного пароля в качестве необработанного строкового пароля работает.Таким образом, хеширование пароля работает, но не сравнивая необработанный пароль с фактом.

1 Ответ

0 голосов
/ 25 сентября 2018
if not check_password(self.request.data['password'], obj.password):
        raise Http404

изменить строку на вышеуказанный код

...