Python Django Authenticate始终返回无和正确的凭据
我正在为我的项目创建一个登录和注册页面,并使用Django MySQL数据库进行登录和创建用户。注册操作正确,但登录功能不适用于我 PS:is_active设置为True,但仍然不起作用 如果所有信息都正确,则不会显示任何信息。我已经给出了文件的所有必要部分和代码 我尝试了所有的方法,但似乎没有任何效果。我也尝试了StackOverflow上列出的一些解决方案,但仍然没有任何效果Python Django Authenticate始终返回无和正确的凭据,python,django,authentication,Python,Django,Authentication,我正在为我的项目创建一个登录和注册页面,并使用Django MySQL数据库进行登录和创建用户。注册操作正确,但登录功能不适用于我 PS:is_active设置为True,但仍然不起作用 如果所有信息都正确,则不会显示任何信息。我已经给出了文件的所有必要部分和代码 我尝试了所有的方法,但似乎没有任何效果。我也尝试了StackOverflow上列出的一些解决方案,但仍然没有任何效果 from django.shortcuts import render, redirect from .models
from django.shortcuts import render, redirect
from .models import Description
from django.http import HttpResponse
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login
# Create your views here.
def index(request):
d = Description.objects.all()
return render(request,'index.html',{'des':d})
def signup(request):
if request.method == 'POST':
first_name = request.POST['first']
last_name = request.POST['last']
user_name = request.POST['user']
email = request.POST['email']
pass1 = request.POST['password1']
pass2 = request.POST['password2']
if pass1 == pass2:
if User.objects.filter(email=email).exists():
print("Email taken")
elif User.objects.filter(username=user_name).exists():
print("Username taken")
else:
user = User.objects.create_user(username = user_name, first_name=first_name,last_name=last_name, password=pass1, email=email)
user.save()
print("User created")
else:
print("Password Not Matching")
return redirect('/')
else:
return render(request,'signup.html')
def login(request):
if request.method == 'POST':
email = request.POST['email']
password = request.POST['password']
print(email,password)
user = authenticate(request, email=email, password=password)
print(user)
if user is not None:
login(request, user)
print("Logged in")
else:
print("not logged in")
return redirect('/')
else:
return HttpResponse("Invalid")
问题是你的注册方法。您不应向init函数提供密码。您应该使用用户的
设置密码
方法
在注册视图中,在创建用户对象的行中删除password=pass1
。然后在保存用户之前,添加user.set\u password(pass1)
希望这有帮助 问题在于你的注册方法。您不应向init函数提供密码。您应该使用用户的
设置密码
方法
在注册视图中,在创建用户对象的行中删除password=pass1
。然后在保存用户之前,添加user.set\u password(pass1)
希望这有帮助 问题是django的默认身份验证机制不允许您使用
电子邮件
进行身份验证,您只能使用用户名
对用户进行身份验证。
无论哪种方式,您都可以使用该用户的电子邮件从用户模型
获取该用户的用户名,然后您可以对该用户进行身份验证
def login(request):
if request.method == 'POST':
email = request.POST['email']
password = request.POST['password']
username = ''
try:
username = User.objects.get(email=email).username
except User.DoesNotExist:
return HttpResponse("Invalid")
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
print("Logged in")
else:
print("not logged in")
return redirect('/')
else:
return HttpResponse("Invalid")
也不要直接存储密码,始终使用django的用户标准set\u password()
if User.objects.filter(email=email).exists():
print("Email taken")
elif User.objects.filter(username=user_name).exists():
print("Username taken")
else:
user = User.objects.create_user(username = user_name, first_name=first_name,last_name=last_name, email=email)
user.set_password(pass1)
user.save()
print("User created")
问题是django的默认身份验证机制不允许您使用电子邮件进行身份验证,您只能使用用户名进行身份验证。
无论哪种方式,您都可以使用该用户的电子邮件从用户模型
获取该用户的用户名,然后您可以对该用户进行身份验证
def login(request):
if request.method == 'POST':
email = request.POST['email']
password = request.POST['password']
username = ''
try:
username = User.objects.get(email=email).username
except User.DoesNotExist:
return HttpResponse("Invalid")
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
print("Logged in")
else:
print("not logged in")
return redirect('/')
else:
return HttpResponse("Invalid")
也不要直接存储密码,始终使用django的用户标准set\u password()
if User.objects.filter(email=email).exists():
print("Email taken")
elif User.objects.filter(username=user_name).exists():
print("Username taken")
else:
user = User.objects.create_user(username = user_name, first_name=first_name,last_name=last_name, email=email)
user.set_password(pass1)
user.save()
print("User created")
Djangoauthenticate
方法只允许使用用户名进行身份验证。
您可以使用用户的电子邮件从用户模型中获取用户的用户名
username = User.objects.get(email=email).username
password = request.POST.get('password')
替换此user=authenticate(请求,电子邮件=email,密码=password)
使用此user=authenticate(请求,用户名=username,密码=password)
Djangoauthenticate
方法只允许使用用户名进行身份验证。
您可以使用用户的电子邮件从用户模型中获取用户的用户名
username = User.objects.get(email=email).username
password = request.POST.get('password')
替换此user=authenticate(请求,电子邮件=email,密码=password)
使用此user=authenticate(request,username=username,password=password)
login()接受1个位置参数,但给出了2个位置参数。我这次收到此错误消息您的登录函数具有相同的名称login。请将其更改为其他类似user_login的选项,然后它将正常工作如果您发现此答案有帮助,请随意进行选择,thumbs uplogin()接受1个位置参数,但2个位置参数,我这次收到此错误消息您的登录函数具有相同的名称login。请将其更改为其他内容,如user_login,然后它会很好地工作如果您发现此答案有帮助,请随意选择并竖起大拇指。您的回答与我的回答相同,您认为您的回答有什么不同?您的回答与我的回答相同,您认为您的回答有什么不同?