Как сделать вход в django через таблицу, отличную от auth_users?

Не уверен, что я делаю неправильно, я оставлю ниже свои файлы. Метод register работает отлично, но когда я делаю login, каждый раз вывод user is none.

Кто-нибудь знает, что я сделал не так?

Я прочитал документацию по аутентификации в django, но не могу обнаружить проблему. Я видел, что было несколько вопросов по этой проблеме, но я не смог решить свой. settings.py

AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',)

urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('register/', views.registerMethod, name="register"),
    path('login/', views.loginMethod, name="login"),
    path('', include("main.urls")),
    path('', include("django.contrib.auth.urls")), 
]

views.py

def registerMethod(request):
    if request.method=='POST':
        if request.POST.get('email') and request.POST.get('firstname') and request.POST.get('lastname') and request.POST.get('password'):
            user = NewUser()
            user.first_name = request.POST.get('firstname')
            user.last_name = request.POST.get('lastname')
            user.password = request.POST.get('password')
            user.email = request.POST.get('email')
            password =  user.password.encode('utf-8')
            # Hash the ecoded password and generate a salt: 
            hashedPassword = bcrypt.hashpw(password, bcrypt.gensalt(10))
            
            user.password = str(hashedPassword)
            user.first_name = CleanString(user.first_name)
            user.last_name = CleanString(user.last_name)
            user.email = CleanString(user.email)
            message = None
            if UserExistsByEmail(user.email):
                message = 'You are already registered!'
                return render(request, 'register/register.html', {"message":message})
            else:
                user.save()
                message = 'You have succesfully created an account!'
                return render(request, 'registration/login.html', {"message":message})
        else:
            return render(request, 'register/register.html')
    else:
            return render(request, 'register/register.html')

def loginMethod(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)
            message = 'You are logged in!'
            return render(request, 'registration/login.html', {"message":message})
        else:
            message = 'user is None!'
            return render(request, 'registration/login.html', {"message":message})
    else:
        return render(request, 'registration/login.html')

models.py

from django.db import models
from datetime import datetime

# Create your models here.
class NewUser(models.Model):
    username = models.CharField(max_length=100, default='noUsername')
    password = models.CharField(max_length=100)
    email  = models.EmailField(max_length=100)
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    is_staff = models.BooleanField(default=0)
    is_super_user = models.BooleanField(default=0)
    is_active = models.BooleanField(default=1)
    date_joined = models.DateTimeField(default=datetime.now)
    
    USERNAME_FIELD = "email"
        
    class Meta:
        db_table = "users"
    def __str__(self):
            return self.email

Вы должны установить AUTH_USER_MODEL в вашем settings.py. Django должен знать, какого "Пользователя" использует ваш проект.

AUTH_USER_MODEL = 'your_app.NewUser'

Но вы не хотите, чтобы ваш NewUser был models.Model, он должен быть AbstractUser или другим классом CustomUser. Прежде чем продолжить, пожалуйста, прочитайте некоторые официальные документы о настройке пользователя .

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