Невозможно установить_пароль с помощью POST-запроса

Я пытаюсь сделать функцию, которая может сбросить пароль пользователя OTP matached на значение, сохраненное в модели пользователя.

Я могу сделать успешный пост запрос и JSON ответ, который я получаю

{
    "detail": "Password have been changed"
}

Но проблема в том, что пароль на самом деле не меняется, а остается старым. Может ли кто-нибудь определить, в чем проблема в моей функции. Мое представление API следующее :

@api_view(['POST'])
def reset_password(request):
    data = request.data
    email = data['email']
    otp_to_verify = data['otp']
    new_password = data['password']

    user = User.objects.get(email=email)
    if User.objects.filter(email=email).exists():
        otp_to_verify == user.otp #user model has a field name otp
        if new_password != '':
            # user.set_password(make_password(data['password']))
            user.set_password((data['password'])) #changed to this but dosnt work 
            user.save()
            message = {
                'detail': 'Password have been changed'}
            return Response(message, status=status.HTTP_200_OK)
        else:
            message = {
                'detail': 'Something wrong'}
            return Response(message, status=status.HTTP_400_BAD_REQUEST)
    else:
        message = {
            'detail': 'Something went wrong'}
        return Response(message, status=status.HTTP_400_BAD_REQUEST)

Так что я не уверен, в чем может быть проблема, так как он проходит молча, не выдавая никаких ошибок, но в итоге пароль не меняется.

РЕДАКТИРОВАТЬ: при использовании этого метода хэш пароля пользователя в базе данных изменяется, но не удается войти в систему с новым паролем, а старый пароль также становится недействительным. тогда возникает эта ошибка .

 Unauthorized: /api/v1/accounts/login/
    [11/Feb/2022 17:44:54] "POST /api/v1/accounts/login/ HTTP/1.1" 401 63
    Not Found: /jwt/refresh-token
    [11/Feb/2022 17:44:54] "POST /jwt/refresh-token HTTP/1.1" 404 2761

Я думаю, что метод user.set_password не требует использования функции make_password.

  1. set_password по умолчанию хэширует обычный текстовый пароль

    user.set_password(data['password'])

  2. Использование make_password

    user.password = make_password(data['password'])

Вернуться на верх