无论如何自定义 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 参数中获取用户电子邮件(以便识别用户)
  • 在为所有用户创建用户帐户时设置默认密码,并在身份验证时使用该密码(不推荐)