Django: authentication() не возвращает ничего, кроме одного случая

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

Проблема, которую я получаю, заключается в том, что я пытаюсь войти в систему с любым пользователем, хранящимся в таблице auth_user. За исключением одного случая (который я создал перед созданием модели userProfile). Таким образом, в моей таблице auth_user проход для этого случая закодирован, но для остальных случаев это обычный текст.

Вот моя функция, обрабатывающая представление -

def login_view(request):
    if request.method == 'POST':
        print(request.body)
        username = request.POST.get('id_username')
        password = request.POST.get('id_password')
        print(username, password)
        try:
            import pdb; pdb.set_trace()

            user = authenticate(username=username, password=password)
            print('This is ',user)

            if user is not None:
                login(request,user)
            else:
                return redirect('fileupload')
            print('This is ',user).... some more code

Теперь, когда я передаю учетные данные для этого случая и пытаюсь пройти аутентификацию. вход в систему работает (за исключением того, что мой код зависает в какой-то момент позже, потому что у этого пользователя нет профиля).

Когда я передаю учетные данные для пользователя, созданного после создания модели UserProfile. То

authenticate(username=username, password=password)

функция возвращает

None

Я включил это в свой settings.py -

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

Это моя модель -

from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver


class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, null=True)
    contact_no = models.CharField(max_length=10, null=True)
    # email = models.EmailField()
    department = models.CharField(max_length=25, null=True)
    status = models.IntegerField(null=True)
    industry_segment = models.CharField(max_length=50, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    created_by = models.IntegerField(null=True)
    updated_at = models.DateTimeField(auto_now=True)
    updated_by = models.IntegerField(null=True)


@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        UserProfile.objects.create(user=instance)


@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
    instance.userprofile.save()

Вот как я сохраняю пользователей -

def user_view(request):
    print(request.user)
    if request.is_ajax():

        print(request.user)

        data = json.load(request)
        u_name = data['txtfirstName'] + " " + data['txtlastName']             




user=User(username=u_name,password='test123',email=data['txtemailId'])
                user.save()
                # userprofile= UserProfile.objects.create(user=request.user)
                user.userprofile.contact_no = data['txtcontactNo']
                # user.userprofile.email = data['txtemailId']
                user.userprofile.department = data['txtdeptvalue']
                user.userprofile.status = data['txtstatusvalue']
                user.userprofile.industry_segment = 'Software'
                user.userprofile.created_at = datetime.datetime.now()
                user.userprofile.created_by = request.user.id
                user.userprofile.updated_at = datetime.datetime.now()
                user.userprofile.updated_by = request.user.id
                user.save()

игнорировать форматирование этого кода... но он работает

Так может ли кто-нибудь помочь мне с проблемой аутентификации?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
190
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не должны создавать таких пользователей. Пароль не будет хэшироваться, поэтому никогда не будет совпадать при аутентификации. Вы всегда должны использовать метод менеджера create_user.

user = User.objects.create_user(username=u_name, password='test123', email=data['txtemailId'])

Другие вопросы по теме