Невозможно войти в систему пользователям Django

Я пишу сайт с пользовательской моделью пользователя. Я хочу получить доступ к сайту через telegram. Все работает, но сама аутентификация - функция login ничего не делает( Я не понимаю в чем дело, уже 3 дня пробую разные способы, но ничего не получается. Буду рад любому совету. А вот мой код

#users/urls.py
from django.urls import path
from . import views

app_name = 'users'

urlpatterns = [
    path('telegram_auth/generate_code/', views.GenerateTelegramCodeView.as_view(), name='generate_telegram_code'),
    path('telegram_auth/', views.TelegramAuthView.as_view(), name='telegram_auth'),
    path('auth/', views.AuthenticateView.as_view(), name='authenticate'),
]

#users/backend.py
from django.contrib.auth.backends import BaseBackend
from django.contrib.auth import get_user_model

import logging
logger = logging.getLogger(__name__)

class TelegramAuthBackend(BaseBackend):
    def authenticate(self, request, telegram_id=None):
        logger.debug(f"Trying to authenticate user with telegram_id={telegram_id}")
        UserModel = get_user_model()
        try:
            user = UserModel.objects.get(telegram_id=telegram_id, is_active=True)
            logger.debug("User found and is active")
            return user
        except UserModel.DoesNotExist:
            logger.debug("User not found")
            return None
#users/models.py
from django.db import models
import uuid

from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
from django.db import models
from django.utils.translation import gettext_lazy as _

class AuthCode(models.Model):
    code = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
    session_id = models.CharField(max_length=50, null=True, blank=True)
    telegram_id = models.CharField(max_length=50, null=True, blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    expiry_time = models.DateTimeField()  # Убедитесь, что это поле добавлено
    is_used = models.BooleanField(default=False)

    def __str__(self):
        return f"{self.code} - Expires at {self.expiry_time}"


class CustomUserManager(BaseUserManager):
    def create_user(self, telegram_id, password=None, **extra_fields):
        if not telegram_id:
            raise ValueError(_('The Telegram ID must be set'))
        user = self.model(telegram_id=telegram_id, **extra_fields)
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, telegram_id, password, **extra_fields):
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)
        return self.create_user(telegram_id, password, **extra_fields)

class CustomUser(AbstractBaseUser, PermissionsMixin):
    telegram_id = models.CharField(_('Telegram ID'), unique=True, max_length=50)
    is_active = models.BooleanField(_('Active'), default=True)
    is_staff = models.BooleanField(_('Staff status'), default=False)

    objects = CustomUserManager()

    USERNAME_FIELD = 'telegram_id'
    REQUIRED_FIELDS = []

    # Изменение related_name для каждого поля, чтобы избежать конфликта
    groups = models.ManyToManyField(
        'auth.Group',
        verbose_name=_('groups'),
        blank=True,
        help_text=_('The groups this user belongs to. A user will get all permissions granted to each of their groups.'),
        related_name="customuser_set",
        related_query_name="customuser",
    )
    user_permissions = models.ManyToManyField(
        'auth.Permission',
        verbose_name=_('user permissions'),
        blank=True,
        help_text=_('Specific permissions for this user.'),
        related_name="customuser_set",
        related_query_name="customuser",
    )

    def __str__(self):
        return self.telegram_id
#authenticate.html (script)
<script>
    function checkLoginStatus() {
        fetch('/users/auth/', {
            method: 'POST', // Явное указание, что это POST-запрос
            headers: {
                'Content-Type': 'application/json',
                // Добавьте 'X-CSRF-Token': 'токен' если CSRF защита включена
            },
            credentials: 'include'
        })
        .then(response => response.json())
        .then(data => {
            if (data.isLoggedIn) {
                console.log(data.message); // Пользователь вошёл в систему
                clearInterval(loginStatusInterval); // Остановка интервала
                window.location.href = "/"; // Перенаправление на защищённую страницу
            } else {
                console.log(data.message); // Пользователь не вошёл в систему
            }
        })
        .catch(error => console.error('Ошибка при запросе статуса входа:', error));
    }
    
    // Установка интервала для периодической проверки статуса входа
    let loginStatusInterval = setInterval(checkLoginStatus, 1000);    
</script>
#base.html (script)
<script>
    function openLoginModal() {
        document.getElementById('loginModal').style.display = 'block';
    }
    
    function getTelegramCode() {
        fetch('/users/telegram_auth/generate_code/')
            .then(response => response.json())
            .then(data => {
                // Открыть ссылку в новой вкладке
                window.open(`https://t.me/xkiks_bot?start=${data.code}`, '_blank');
                
                // Закрыть модальное окно
                document.getElementById('loginModal').style.display = 'none';
                
                // Задержка перед перенаправлением, чтобы у пользователя было время увидеть открытие новой вкладки
                setTimeout(function() {
                    window.location.href = "/users/auth/";
                }, 1000); // Задержка в 1000 миллисекунд (1 секунда)
            })
            .catch(error => {
                console.error('Error:', error);
                alert('Произошла ошибка при попытке получить код доступа.');
            });
    }
    
    
    function authenticateUser(telegram_id, code) {
        fetch('/users/telegram_auth/', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
            },
            body: JSON.stringify({ telegram_id: telegram_id, code: code })
        })
        .then(response => response.json())
        .then(data => {
            if (data.status === 'success') {
                alert('Успешный вход');
                // Вы можете перенаправить пользователя или обновить UI, например:
                // window.location.href = '/profile';
            } else {
                alert(data.message);  // Показать ошибку пользователю
            }
        })
        .catch(error => console.error('Error:', error));
    }
</script>

Я прочитал официальную документацию и попытался разобраться в исходном коде. Но не нашел там ничего подозрительного

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