티스토리 뷰

study/Django

django.contrib.auth

xoxowo 2023. 6. 15. 22:00

기존에 프로젝트에 user app을 추가하여 models.py를 정의하여 회원을 직접 만들었다면, 이번엔 django가 제공하는 인증 시스템 이용해서 간단하게 회원 인증 여부를 구현해 봤다. (공식 문서)

 

django.contrib.auth 앱은 인증 시스템을 담당하는 앱으로 회원을 관리할 수 있는 기능을 기본적으로 제공한다. 

(※ 'settings.py  파일 INSTALLED_APPS에서 확인할 수 있다.)

 

해당 앱에 내장되어있는 기본 User 모델은 username, password, first_name, last_name, email, groups, is_staff, is_active 등 여러 개의 필드를 기본적으로 가지고 있다. 

 

기본 User 모델을 사용하면서 추가적으로 필드를 추가하고 싶은 경우 (유저 모델 커스텀) django는 여러개의 방법을 제공하는데, 기본 User 모델을 확장하여 커스텀 유저 모델을 생성하는 방법인 AbstractUser를 사용하여 User 모델에 원하는 필드를 추가로 정의해 봤다.

(※ 커스텀 유저 모델을 정의하면 'settings.py'에 AUTH_USER_MODEL = '앱 이름. User' 변수를 선언해야 한다.)

 

아래 models.py 살펴보면 User class는 'AbstractUser'를 상속받아 기본 User 모델 필드에 phone_number 필드와  create_at 필드가 추가된 것을 확인할 수 있다.

 

→ 폴더명\hyj\users\models.py

from django.contrib.auth.models import AbstractUser
from django.db import models

class UserGrade(models.Model):
    grade = models.CharField(max_length=50)

    class Meta: 
        db_table = 'user_grade'

class User(AbstractUser):
    phone_number = models.CharField(max_length=50)
    created_at   = models.DateField(auto_now_add=True) 
    user_grade   = models.ForeignKey('UserGrade', on_delete=models.CASCADE, default=2)
    
    class Meta: 
        db_table = 'users'

DB/ user table

 

 

 

authenticate() 인증은 django에서 제공하는 기능이기 때문에 기존에 users/models.py에 정의했던 모델을 기본 User 모델을 사용하는 것으로 변경한 후 다시 users 앱 모델부터 수정해서 적용해 봤다.

 

결론 

create(), create_user()로 생성한 유저 모두 로그인 시 authenticate() 인증이 가능

create_user()는 자동으로 비밀번호를 암호화하여 저장해주기 때문에 바로 authenticate() 인증이 가능

create()는 비밀번호를 암호화하는 과정을 한 후 실행해야함. 번거롭기 때문에 create_user()를 사용하는 것을 권장

 

 

 

User.objects.create()는 User 모델의 매니저(Manager)인 objects를 통해 호출 비밀번호를 암호화하지 않고, 입력된 값을 그대로 저장하기 때문에 비밀번호 필드가 None 값

 

 회원가입 O, 로그인 시 None 값으로 로그인 인증이 되지 않음

# 기존 user 생성
# → hyj\users\views.py

User.objects.create(
                username     = username,
                email        = email,
                password     = password,
                phone_number = phone_number,
            )

 

User.objects.create_user()는 Django의 인증 시스템에 내장된 UserManager 클래스의 메서드로서, User 모델의 인스턴스를 생성하고 비밀번호를 암호화하여 저장

 

 회원가입 O, 로그인 시 유저 인증 값으로 로그인 됨

# django auth user 생성
# → hyj\users\views.py

user = User.objects.create_user(
                username     = username,
                email        = email,
                password     = password,
                phone_number = phone_number,
            )
            user.save()

 

 DB/ user table

create()로 생성한 유저 aa111

create_user()로 생성한 유저 aa11

 

'study > Django' 카테고리의 다른 글

한글 형태소 분석기 Okt  (0) 2023.07.03
authenticate() 함수  (0) 2023.05.29
Template - 검색 결과 내 페이지네이션  (0) 2023.05.22
Template 기본 구조  (0) 2023.05.11
Django - AWS S3 파일 업로드  (0) 2023.04.14
댓글