Django authenticate () не возвращает ни одного, кроме одного случая - PullRequest
0 голосов
/ 10 апреля 2019

Так что я застрял в какой-то момент в моем проекте.Я пытаюсь создать пользователей, и я расширил модель User, используя метод 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.

аутентификация (имя пользователя = имя пользователя, пароль = пароль)

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

Нет

Я включил это в мои 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()

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

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

1 Ответ

1 голос
/ 10 апреля 2019

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

user = User.objects.create_user(username=u_name, password='test123', email=data['txtemailId'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...