Метод аутентификации Django не работает

Я пытаюсь использовать стандартный метод Django из django.contrib.auth authenticate() для аутентификации, если пользователь существует. Я делаю это сразу после регистрации пользователя. Пользователь регистрируется, его имя пользователя, email и пароль вводятся в базу данных, затем он попадает на страницу входа, но это не работает.

Вот мой views.py

from django.shortcuts import render,redirect
from .models import Student
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login

# Create your views here.
def index(request):
    if request.method == "POST":
        fname = request.POST.get('fname')
        lname = request.POST.get('lname')
        pnumber = request.POST.get('pnumber')
        email = request.POST.get('email')
        password = request.POST.get('password')
        student = Student(fname = fname, lname = lname, pnumber = pnumber, email = email, 
        password = password)
        student.save()
        user = User.objects.create_user(fname, email, password)
        user.save()

    return render(request, ('SignUpPage.html'))

def loginUser(request):
    if request.method == "POST":
        email = request.POST.get('email')
        password = request.POST.get('password')
        user = authenticate(email=email, password=password)
        if user is not None:
            login(request, user)
            return redirect('mainPage')
        else:
            return render(request, ('LoginPage.html'))
        
    return render(request, ('LoginPage.html'))

def mainPage(request):
    return render(request, ('MainPage.html'))

Вот мой urls.py

from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
    path('', views.index, name='index'),
    path('login', views.loginUser, name="login"),
    path('mainPage',views.mainPage, name='mainPage')
]

Вот мой html код

Вы пытаетесь аутентифицироваться по электронной почте, базовый аутентификатор Django - это имя пользователя. Если вы хотите использовать email, вы должны сказать об этом Django. Добавьте к вашей User модели следующее:

class User(...):
    ...
    USERNAME_FIELD = "email"
    ...

Также вы сказали, что пользователь регистрирует username, но в представлении вы используете только fname и lname. Пожалуйста, будьте конкретны и читайте то, что вы пишете, иначе мы не сможем вам помочь.

Вернуться на верх