Невозможно установить_пароль с помощью 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.
set_passwordпо умолчанию хэширует обычный текстовый парольuser.set_password(data['password'])Использование
make_passworduser.password = make_password(data['password'])