Почему аутентификация не проходит, даже если email и пароль верны в django?
class login(APIView):
def post(self,request):
email=request.data.get('email')
password=request.data.get('password')
user=get_user_model()
print("user model",user)
print(email,password)
user = User.objects.get(email=email)
if str(password) == str(user.password):
print("authenticated")
# return Response({'status':200})
user = authenticate(request,email=email,password=password)
if user is not None:
# User is authenticated, you can proceed with further logic
return Response({'status':200,'msg': 'Login successful'})
else:
return Response({'status':401,'error': 'Invalid credentials'})
Я создал пользовательскую модель пользователя с электронной почтой и паролем, делаю post запрос через postman и отправляю данные в формате JSON .Я использовал простую проверку пароля и пароль совпал, как и ожидалось, но функция authenticate не дает правильных результатов. Что может быть причиной такого поведения и как это решить?
Прежде всего, при сравнении паролей не следует преобразовывать их в строки и сравнивать напрямую, потому что Django хранит пароли с использованием алгоритма хэширования в целях безопасности. Вместо этого следует использовать метод check_password
, предоставляемый пользовательской моделью Django, например, так:
if check_password(password, user.password):
Затем в файле настроек вы должны установить AUTHENTICATION_BACKENDS
следующим образом, чтобы включить вашу модель аутентификации:
AUTHENTICATION_BACKENDS = [
'django.contrib.auth.backends.ModelBackend',
'yourAppName.authenticationModule.YourCustomUserBackend',
]