Вход в систему по электронной почте: функция аутентификации не работает

def EmailLoginVerify(request):
    if request.method == 'POST':
        if 'token' in request.POST:
            try:
                submitted_token = int(request.POST['token'])
            except ValueError:
                return HttpResponse('Invalid token format', status=400)

            if submitted_token == request.session.get('login_token'):
                email = request.session.get('email')
                try:
                    target = MyUser.objects.get(email=email)
                    print('user is', target.username, 'and password is', target.password)
#export:
#>>>>>>>user is maziar and password is pbkdf2_sha256$720000$CY5sjiqAL1yScKzGhzYBp9$2tUx8ScBbbuZlj+u0YfMxwTIRfz5Vfmv+58piWCAjKM=

                except MyUser.DoesNotExist:
                    return HttpResponse('User Not Found', status=404)

                user = authenticate(request, username=target.username, password=target.password)
                print(user)
#export:
#>>>>> None

                if user is not None:
                    login(request, user)
                    return HttpResponse('good')
                else:
                    return HttpResponse('Authentication failed', status=401)
            else:
                return HttpResponse('Invalid token', status=403)
        else:
            return HttpResponse('Token not provided', status=400)
    else:
        return render(request, 'login_verify.html')

в конце он возвращает 'Authrntication Failed'. этот код получает email от пользователя, если пользователь с таким email существует, он отправляет код на email и если пользователь вводит правильный код, он должен аутентифицировать пользователя и войти в систему, но он возвращает 'Authentication Failed'

введите описание изображения здесь

Когда вы пытаетесь аутентифицировать пользователя с помощью имени пользователя и пароля из базы данных, вы передаете хэшированный пароль непосредственно в функцию authenticate. Однако функция Django authenticate ожидает необработанный пароль (не хэшированный), и она будет хэшировать его внутри, чтобы сверить с хэшем, хранящимся в базе данных.

Поскольку вы пытаетесь аутентифицировать пользователя с помощью хэшированного пароля, аутентификация не удалась.

Вы не можете напрямую аутентифицировать пользователя с помощью стандартного метода authenticate, поскольку на этом этапе пользователь не предоставил свой пароль. Возможно, вам стоит рассматривать этот процесс как отдельный шаг проверки, на котором вы входите в систему после проверки токена, не требуя ввода пароля.

def EmailLoginVerify(request):
    if request.method == 'POST':
        if 'token' in request.POST:
            try:
                submitted_token = int(request.POST['token'])
            except ValueError:
                return HttpResponse('Invalid token format', status=400)

            if submitted_token == request.session.get('login_token'):
                email = request.session.get('email')
                try:
                    target = MyUser.objects.get(email=email)
                    print('user is', target.username, 'and password is', target.password)

                except MyUser.DoesNotExist:
                    return HttpResponse('User Not Found', status=404)

                # Bypass password authentication after successful token verification
                login(request, target)
                return HttpResponse('good')

            else:
                return HttpResponse('Invalid token', status=403)
        else:
            return HttpResponse('Token not provided', status=400)
    else:
        return render(request, 'login_verify.html')

Надеюсь, это немного поможет вам.

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