邮箱登录:认证功能不起作用

问题描述 投票:0回答:1
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')

最后返回“身份验证失败” 此代码从用户处获取电子邮件,如果存在具有该电子邮件的用户,则会向该电子邮件发送代码 如果用户输入正确的代码,它应该对用户进行身份验证并登录,但会返回“身份验证失败”

在此输入图片描述

python django
1个回答
0
投票

当您尝试使用数据库中的用户名和密码对用户进行身份验证时,您会将散列密码直接传递给

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')

希望这对你有一点帮助。

© www.soinside.com 2019 - 2024. All rights reserved.