Problem with user authentication in django
For a reason unknown to me, when authenticating a user, I enter the following data: email and password, as a result, super users are authenticated, but ordinary users are not.
What can be done about this? Has anyone encountered such a problem? Please help me solve this, I'm completely new to Django.
Here are the files in the project (if you need any other files, write):
views.py
from django.contrib.auth import authenticate, login
from django.http import HttpResponse
from django.shortcuts import render, redirect
from users.models import User
def register(request):
if request.method == "POST":
username = request.POST.get("username")
email = request.POST.get("email")
password = request.POST.get("password")
# password2 = request.POST.get("password2")
phone_number = request.POST.get("phone_number")
user = User (
username = username,
email = email,
password = password,
phone_number = phone_number
)
user.save()
return redirect('main:index')
return render(request, 'users/register.html')
def user_login(request):
if request.method == "POST":
email = request.POST.get("email")
password = request.POST.get("password")
user = authenticate(email=email, password=password)
if user and user.is_active:
login(request, user)
return HttpResponse('Authenticate!')
else:
return HttpResponse('No Login!')
return render(request, 'users/login.html')
models.py
from django.db import models
from phonenumber_field.modelfields import PhoneNumberField
from django.contrib.auth.models import AbstractUser
from users.managers import CustomUserManager
class User (AbstractUser):
username = models.CharField(max_length=20, unique=True)
email = models.EmailField(unique=True)
password = models.CharField(null=True, blank=False, max_length=30)
phone_number = PhoneNumberField(region="IN", unique=True, null=True, blank=False)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
objects = CustomUserManager()
def __str__(self):
return self.username
managers.py
from django.contrib.auth.base_user import BaseUserManager
class CustomUserManager(BaseUserManager):
use_in_migrations = True
def _create_user(self, email=None, password=None, username=None, **extra_fields):
if email:
email = self.normalize_email(email)
user = self.model(username=username, **extra_fields)
user.email = email
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, email=None, password=None, username=None, **extra_fields):
extra_fields.setdefault('is_superuser', False)
extra_fields.setdefault('is_staff', False)
extra_fields.setdefault('is_active', True)
return self._create_user(email, password, username, **extra_fields)
def create_superuser(self, email=None, password=None, username=None, **extra_fields):
extra_fields.setdefault('is_superuser', True)
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_active', True)
return self._create_user(email, password, username, **extra_fields)
admin.py
from django.contrib import admin
from .models import User
admin.site.register(User)
class UserAdmin(admin.ModelAdmin):
list_display = ('id', 'username')
settings.py
AUTH_USER_MODEL = 'users.User'
I am waiting for the authentication to work and the created users to be able to log in to my site. I would also like to understand in more detail why the superuser can be authenticated, but the user created on the site cannot.