无论如何自定义 Django 的身份验证功能?
Is there anyway to customise authenticate function of Django?
我是 Django 的新手,所以我想知道我应该怎么做才能使 Django 的默认身份验证功能只接受电子邮件和密码登录,假设在注册表单中我有用户名和电子邮件。当我添加
时,以下代码不起作用 properly.However
username = request.POST.get('username')
并改变
user = authenticate(request, username=username email=email, password=password)
它按预期登录。
登录查看:
def LoginPage(request):
if request.method == 'POST':
email = request.POST.get('email')
password = request.POST.get('password')
user = authenticate(request, email=email, password=password)
if user is not None:
login(request, user)
print('logged')
return redirect('/inker/')
return render(request, 'authy/login.html')
注册视图:
def SignUpPage(request):
form = CreateUserForm()
if request.method == 'POST':
form = CreateUserForm(request.POST)
if form.is_valid():
form.save()
return redirect('/login/')
context={'form':form}
return render(request, 'authy/signup.html', context)
表单模块:
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class CreateUserForm(UserCreationForm):
class Meta:
model = User
fields = ['username','email', 'password1', 'password2']
正如您在“注册”视图中看到的那样,我们同时拥有用户名和电子邮件,但在登录表单中,我希望它仅基于电子邮件登录用户。我该如何实现。
另外,当用户想要登录时,如何将用户名和电子邮件压缩到一个输入中?很像 instagram,facebook 登录页面
如果您只想使用电子邮件访问用户,那么您一开始就没有使用身份验证。因此,为了解决您的目的,可以遵循以下方法:
- 在每个请求的 url 参数中获取用户电子邮件(以便识别用户)
- 在为所有用户创建用户帐户时设置默认密码,并在身份验证时使用该密码(不推荐)
我是 Django 的新手,所以我想知道我应该怎么做才能使 Django 的默认身份验证功能只接受电子邮件和密码登录,假设在注册表单中我有用户名和电子邮件。当我添加
时,以下代码不起作用 properly.Howeverusername = request.POST.get('username')
并改变
user = authenticate(request, username=username email=email, password=password)
它按预期登录。
登录查看:
def LoginPage(request):
if request.method == 'POST':
email = request.POST.get('email')
password = request.POST.get('password')
user = authenticate(request, email=email, password=password)
if user is not None:
login(request, user)
print('logged')
return redirect('/inker/')
return render(request, 'authy/login.html')
注册视图:
def SignUpPage(request):
form = CreateUserForm()
if request.method == 'POST':
form = CreateUserForm(request.POST)
if form.is_valid():
form.save()
return redirect('/login/')
context={'form':form}
return render(request, 'authy/signup.html', context)
表单模块:
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class CreateUserForm(UserCreationForm):
class Meta:
model = User
fields = ['username','email', 'password1', 'password2']
正如您在“注册”视图中看到的那样,我们同时拥有用户名和电子邮件,但在登录表单中,我希望它仅基于电子邮件登录用户。我该如何实现。
另外,当用户想要登录时,如何将用户名和电子邮件压缩到一个输入中?很像 instagram,facebook 登录页面
如果您只想使用电子邮件访问用户,那么您一开始就没有使用身份验证。因此,为了解决您的目的,可以遵循以下方法:
- 在每个请求的 url 参数中获取用户电子邮件(以便识别用户)
- 在为所有用户创建用户帐户时设置默认密码,并在身份验证时使用该密码(不推荐)