Django에서 사용자 지정 사용자 모델로 로그인하는 동안 인증 문제

다니엘 디아즈

이메일 필드를 사용자 이름으로 사용하는 사용자 지정 사용자 모델을 만들었습니다.

또한 이메일 필드에서 대소 문자를 구분하지 않는지 확인하기 위해 사용자 지정 백엔드를 만들어야했습니다. 등록 페이지는 완벽하게 작동하지만 생성되지 않은 사용자로 로그인하려고하면이 오류가 발생합니다.

Environment:


Request Method: POST
Request URL: http://localhost:8000/members/login/

Django Version: 3.1.4
Python Version: 3.8.6
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'home',
 'projects',
 'about',
 'blog',
 'contact',
 'members',
 'ckeditor',
 'django_bleach']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback (most recent call last):
  File "/home/daniel/MEGA/my-git/github/Developer-Road-Website/Developer-road-website/DeveloperRoad/members/backends.py", line 14, in authenticate
    user = UserModel._default_manager.get(**{case_insensitive_user_name_field: username})
  File "/home/daniel/MEGA/my-git/github/Developer-Road-Website/Developer-road-website/venv/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/home/daniel/MEGA/my-git/github/Developer-Road-Website/Developer-road-website/venv/lib/python3.8/site-packages/django/db/models/query.py", line 429, in get
    raise self.model.DoesNotExist(

During handling of the above exception (BlogUser matching query does not exist.), another exception occurred:
  File "/home/daniel/MEGA/my-git/github/Developer-Road-Website/Developer-road-website/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/home/daniel/MEGA/my-git/github/Developer-Road-Website/Developer-road-website/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 179, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/daniel/MEGA/my-git/github/Developer-Road-Website/Developer-road-website/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 70, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/daniel/MEGA/my-git/github/Developer-Road-Website/Developer-road-website/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 43, in _wrapper
    return bound_method(*args, **kwargs)
  File "/home/daniel/MEGA/my-git/github/Developer-Road-Website/Developer-road-website/venv/lib/python3.8/site-packages/django/views/decorators/debug.py", line 89, in sensitive_post_parameters_wrapper
    return view(request, *args, **kwargs)
  File "/home/daniel/MEGA/my-git/github/Developer-Road-Website/Developer-road-website/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 43, in _wrapper
    return bound_method(*args, **kwargs)
  File "/home/daniel/MEGA/my-git/github/Developer-Road-Website/Developer-road-website/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 130, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "/home/daniel/MEGA/my-git/github/Developer-Road-Website/Developer-road-website/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 43, in _wrapper
    return bound_method(*args, **kwargs)
  File "/home/daniel/MEGA/my-git/github/Developer-Road-Website/Developer-road-website/venv/lib/python3.8/site-packages/django/views/decorators/cache.py", line 44, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "/home/daniel/MEGA/my-git/github/Developer-Road-Website/Developer-road-website/venv/lib/python3.8/site-packages/django/contrib/auth/views.py", line 63, in dispatch
    return super().dispatch(request, *args, **kwargs)
  File "/home/daniel/MEGA/my-git/github/Developer-Road-Website/Developer-road-website/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 98, in dispatch
    return handler(request, *args, **kwargs)
  File "/home/daniel/MEGA/my-git/github/Developer-Road-Website/Developer-road-website/venv/lib/python3.8/site-packages/django/views/generic/edit.py", line 141, in post
    if form.is_valid():
  File "/home/daniel/MEGA/my-git/github/Developer-Road-Website/Developer-road-website/venv/lib/python3.8/site-packages/django/forms/forms.py", line 177, in is_valid
    return self.is_bound and not self.errors
  File "/home/daniel/MEGA/my-git/github/Developer-Road-Website/Developer-road-website/venv/lib/python3.8/site-packages/django/forms/forms.py", line 172, in errors
    self.full_clean()
  File "/home/daniel/MEGA/my-git/github/Developer-Road-Website/Developer-road-website/venv/lib/python3.8/site-packages/django/forms/forms.py", line 375, in full_clean
    self._clean_form()
  File "/home/daniel/MEGA/my-git/github/Developer-Road-Website/Developer-road-website/venv/lib/python3.8/site-packages/django/forms/forms.py", line 402, in _clean_form
    cleaned_data = self.clean()
  File "/home/daniel/MEGA/my-git/github/Developer-Road-Website/Developer-road-website/venv/lib/python3.8/site-packages/django/contrib/auth/forms.py", line 215, in clean
    self.user_cache = authenticate(self.request, username=username, password=password)
  File "/home/daniel/MEGA/my-git/github/Developer-Road-Website/Developer-road-website/venv/lib/python3.8/site-packages/django/contrib/auth/__init__.py", line 73, in authenticate
    user = backend.authenticate(request, **credentials)
  File "/home/daniel/MEGA/my-git/github/Developer-Road-Website/Developer-road-website/DeveloperRoad/members/backends.py", line 17, in authenticate
    UserModel.set_password(password)

Exception Type: TypeError at /members/login/
Exception Value: set_password() missing 1 required positional argument: 'raw_password'

맞춤 사용자 모델과 그 관리자는 다음과 같습니다.

from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager

# Used to create the Custom User and it's manager


class BlogUserManager(BaseUserManager):
    """
    Manage the blog user, email is the login identifier and first name and last name are mandatory
    """

    def create_user(self, email, first_name, last_name, password=None):
        """
        Create and save an User with the given EMAIL, FIRST_NAME, LAST_NAME and Password.
        """
        if not email:
            raise ValueError("Blog user must have an email address")
        if not first_name:
            raise ValueError("Blog user must have a First name")
        if not last_name:
            raise ValueError("Blog user must have a Last name")

        user = self.model(
            email=self.normalize_email(email),
            first_name=first_name,
            last_name=last_name
        )

        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, first_name, last_name, password=None):
        """
        Create and save an Super User with the given EMAIL, FIRST_NAME, LAST_NAME and Password.
        """

        user = self.create_user(
            email=self.normalize_email(email),
            first_name=first_name,
            last_name=last_name,
            password=password
        )

        user.is_admin = True
        user.is_staff = True
        user.is_superuser = True
        user.save(using=self._db)
        return user


def get_profile_image_filepath(self):
    """
    Returns the profile name path to store
    """

    return f"images/profile_images/{self.pk}/profile_image.png"


def get_default_profile_image():
    """
    Returns the default profile image
    """

    return "images/default_profile_image/default.svg"


# Custom User Model

class BlogUser(AbstractBaseUser):
    """
    Basic Custom User for the Blog
    """
    username = None

    email = models.EmailField(verbose_name="email", max_length=70, unique=True)
    first_name = models.CharField(max_length=40)
    last_name = models.CharField(max_length=40)

    date_joined = models.DateTimeField(
        verbose_name="date_joined", auto_now_add=True)
    last_login = models.DateTimeField(verbose_name="last_login", auto_now=True)

    is_admin = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)

    profile_image = models.ImageField(max_length=255, upload_to=get_profile_image_filepath,
                                      default=get_default_profile_image, blank=True, null=True)

    hide_email = models.BooleanField(default=True)

    objects = BlogUserManager()

    USERNAME_FIELD = "email"
    REQUIRED_FIELDS = ["first_name", "last_name"]

    def __str__(self):
        return str(self.first_name) + " " + str(self.last_name)

    def get_profile_image_filename(self):
        """
        Return the profile image filename
        """
        image = str(self.profile_image)
        return image[image.index(f"profile_images/{self.pk}/"):]

    def has_perm(self, perm, obj=None):
        return self.is_admin

    def has_module_perms(self, app_label):
        return True

다음은 오류를 생성하는 커스텀 백엔드입니다.

from django.contrib.auth import get_user_model
from django.contrib.auth.backends import ModelBackend

class CaseModelBackend(ModelBackend):
    """
    Fix the problem of the login with insensitive email.
    """
    def authenticate(self, request, username=None, password=None, **kwargs):
        UserModel =  get_user_model()
        if username is None:
            username = kwargs.get(UserModel.USERNAME_FIELD)
        try:
            case_insensitive_user_name_field = f"{UserModel.USERNAME_FIELD}__iexact"
            user = UserModel._default_manager.get(**{case_insensitive_user_name_field: username})

        except UserModel.DoesNotExist:
            UserModel.set_password(password)

        else:
            if user.check_password(password) and self.user_can_authenticate(user):
                return user

어떡해?

JPG

변화 UserModel.set_password(password)

...에

UserModel().set_password(password).


당신이 잘못한 것은 괄호를 넣지 않았다는 것입니다. set_password()입니다 인스턴스 메소드 가 아닌 클래스 메소드

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Django의 사용자 지정 사용자 모달에서 로그인이 작동하지 않습니다.

분류에서Dev

사용자 정의 django 인증 백엔드는 처음에는 사용자를 로그인하지 않지만 두 번째로 작동합니다.

분류에서Dev

Django 사용자 정의 사용자 모델 인증이 작동하지 않습니다.

분류에서Dev

Django : 사용자 지정 사용자 모델로 마이그레이션하는 문제

분류에서Dev

Express.JS : 두 명의 사용자가 동시에 로그인-다른 사용자가 로그인하는 동안 사용자 쿠키 유지

분류에서Dev

사용자 정의 사용자 모델에 대한 인증이 작동하지 않습니다.

분류에서Dev

맞춤 사용자 모델이 작동하지 않는 django 인증

분류에서Dev

인증 코드 흐름을 사용하는 동안 사용자가 RingCentral에 로그인 상태를 유지하려면 어떻게해야합니까?

분류에서Dev

타사 Oauth 인증 웹 서비스를 사용하는 Rails 앱의 사용자 지정 로그인 양식

분류에서Dev

사용자 지정 사용자 모델을 사용하는 동안 Django의 프로필 소유자로 편집을 제한하는 데 문제가 있습니다.

분류에서Dev

Django에서 사용자 지정 사용자 모델을 인증 할 수 없습니다.

분류에서Dev

Django에서 context_processors.py를 사용하는 동안 로그인 페이지에서 사용자 요청을 피하는 방법은 무엇입니까?

분류에서Dev

Firebase 인증-사용자가 한 계정에 동시에 로그인하지 못하도록합니다.

분류에서Dev

사용자가 사용자 정의 API에서 BigCommerce에 로그인했는지 어떻게 인증합니까?

분류에서Dev

Django에서 사용자 정의 사용자 모델을 사용하는 동안 RelatedObjectDoesNotExist

분류에서Dev

"사용자 프로필 서비스 로그인 실패"-Microsoft 제안 솔루션이 작동하지 않음

분류에서Dev

장고 모델의 사용자 정의 저장 방법 및 로그인 문제

분류에서Dev

django-tastypie에서 작동하지 않는 사용자 정의 인증

분류에서Dev

사용자 뒤에 로그인 한 사용자가 있는지 확인하는 중, 작동하지 않음

분류에서Dev

추정기를 사용하여 Java에서 Tensorflow 모델을로드 / 제공하는 동안 문제

분류에서Dev

winform 응용 프로그램에서 사용자 지정 datetimepicker를 디자인하는 방법을 제안 할 수 있습니까?

분류에서Dev

사용자 모델을 기반으로하지 않는 사용자 지정 인증을 만드는 방법

분류에서Dev

사용자 모델을 기반으로하지 않는 사용자 지정 인증을 만드는 방법

분류에서Dev

사용자 지정 멤버십 생성 후 사용자 자동 로그인 (마법사 사용 안함)

분류에서Dev

사용자 지정 프로필 모델에 자동으로 사용자 토큰 할당 Django Rest Framework

분류에서Dev

사용자 지정 Django 모델 필드에 신호를 자동으로 연결

분류에서Dev

이전에 입력 한 사용자 인증 정보로 앱 로그인 (Firebase를 사용하는 React Native)

분류에서Dev

Facebook 로그인, Passport, Express, React 및 Node를 사용하는 동안 사용자 쿠키가 설정되지 않음

분류에서Dev

모델에 현재 로그인 한 사용자 만 제공하도록 admin.py를 수정합니다.

Related 관련 기사

  1. 1

    Django의 사용자 지정 사용자 모달에서 로그인이 작동하지 않습니다.

  2. 2

    사용자 정의 django 인증 백엔드는 처음에는 사용자를 로그인하지 않지만 두 번째로 작동합니다.

  3. 3

    Django 사용자 정의 사용자 모델 인증이 작동하지 않습니다.

  4. 4

    Django : 사용자 지정 사용자 모델로 마이그레이션하는 문제

  5. 5

    Express.JS : 두 명의 사용자가 동시에 로그인-다른 사용자가 로그인하는 동안 사용자 쿠키 유지

  6. 6

    사용자 정의 사용자 모델에 대한 인증이 작동하지 않습니다.

  7. 7

    맞춤 사용자 모델이 작동하지 않는 django 인증

  8. 8

    인증 코드 흐름을 사용하는 동안 사용자가 RingCentral에 로그인 상태를 유지하려면 어떻게해야합니까?

  9. 9

    타사 Oauth 인증 웹 서비스를 사용하는 Rails 앱의 사용자 지정 로그인 양식

  10. 10

    사용자 지정 사용자 모델을 사용하는 동안 Django의 프로필 소유자로 편집을 제한하는 데 문제가 있습니다.

  11. 11

    Django에서 사용자 지정 사용자 모델을 인증 할 수 없습니다.

  12. 12

    Django에서 context_processors.py를 사용하는 동안 로그인 페이지에서 사용자 요청을 피하는 방법은 무엇입니까?

  13. 13

    Firebase 인증-사용자가 한 계정에 동시에 로그인하지 못하도록합니다.

  14. 14

    사용자가 사용자 정의 API에서 BigCommerce에 로그인했는지 어떻게 인증합니까?

  15. 15

    Django에서 사용자 정의 사용자 모델을 사용하는 동안 RelatedObjectDoesNotExist

  16. 16

    "사용자 프로필 서비스 로그인 실패"-Microsoft 제안 솔루션이 작동하지 않음

  17. 17

    장고 모델의 사용자 정의 저장 방법 및 로그인 문제

  18. 18

    django-tastypie에서 작동하지 않는 사용자 정의 인증

  19. 19

    사용자 뒤에 로그인 한 사용자가 있는지 확인하는 중, 작동하지 않음

  20. 20

    추정기를 사용하여 Java에서 Tensorflow 모델을로드 / 제공하는 동안 문제

  21. 21

    winform 응용 프로그램에서 사용자 지정 datetimepicker를 디자인하는 방법을 제안 할 수 있습니까?

  22. 22

    사용자 모델을 기반으로하지 않는 사용자 지정 인증을 만드는 방법

  23. 23

    사용자 모델을 기반으로하지 않는 사용자 지정 인증을 만드는 방법

  24. 24

    사용자 지정 멤버십 생성 후 사용자 자동 로그인 (마법사 사용 안함)

  25. 25

    사용자 지정 프로필 모델에 자동으로 사용자 토큰 할당 Django Rest Framework

  26. 26

    사용자 지정 Django 모델 필드에 신호를 자동으로 연결

  27. 27

    이전에 입력 한 사용자 인증 정보로 앱 로그인 (Firebase를 사용하는 React Native)

  28. 28

    Facebook 로그인, Passport, Express, React 및 Node를 사용하는 동안 사용자 쿠키가 설정되지 않음

  29. 29

    모델에 현재 로그인 한 사용자 만 제공하도록 admin.py를 수정합니다.

뜨겁다태그

보관