Почему аутентификация не проходит, даже если 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',
]
Вернуться на верх