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')
最后返回“身份验证失败” 此代码从用户处获取电子邮件,如果存在具有该电子邮件的用户,则会向该电子邮件发送代码 如果用户输入正确的代码,它应该对用户进行身份验证并登录,但会返回“身份验证失败”
当您尝试使用数据库中的用户名和密码对用户进行身份验证时,您会将散列密码直接传递给
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')
希望这对你有一点帮助。