데이터 분석 기술 블로그

Django에 대하여(21)_Authentication System 본문

백엔드

Django에 대하여(21)_Authentication System

데이터분석가 이채은 2024. 4. 12. 21:37

1. Django Authentication System (인증 시스템)

Django Authentication System이란, 사용자 인증과 관련된 기능을 모아 놓은 시스템입니다.

Authentications이란, 사용자가 자신이 누구인지 확인하는 것으로 즉, 신원 확인입니다.

 

1.1 사전 준비

두 번째 app accounts 생성 및 등록을 해야 합니다. auth와 관련한 경로나 키워드들을 django 내부적으로 accounts라는 이름으로 사용하고 있기 때문에 되도록 'accounts'로 지정하는 것을 권장합니다.

# accounts/urls.py

from django.urls import path
from . import views

app_name = 'accounts'
urlpatterns = [

]
# crud/urls.py

urlpatterns = [
    ...,
    path('accounts/', include('accounts.urls')),
]

2. Custom User model

django가 기본적으로 제공하는 user model은 내장된 auth 앱의 User 클래스를 사용하기 때문에 Custom User model로 '대체'해야 합니다.

 

2.1 내장된 auth 앱

# settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

 

2.2 User 클래스를 대체하는 이유

  • 우리는 지금까지 별도의 User 클래스 정의 없이 내장된 User 클래스를 사용했습니다.
  • 별도의 설정 없이 사용할 수 있어 간편하지만, 개발자가 직접 수정할 수 없는 문제가 존재합니다.

https://github.com/django/django/blob/main/django/contrib/auth/models.py#L405

 

django/django/contrib/auth/models.py at main · django/django

The Web framework for perfectionists with deadlines. - django/django

github.com

 

2.3 대체하기

AbstractUser를 상속받는 커스텀 User 클래스를 작성합니다. 기존 User 클래스도 AbstractUser를 상속받기 때문에 커스텀 User 클래스도 기존 user 클래스와 완전히 같은 모습을 가지게 됩니다.

# accounts/models.py

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    pass

django 프로젝트가 사용하는 기본 User 모델을 우리가 작성한 User 모델로 지정합니다. 수정 전 기본 값은 'auth.User'입니다.

# settings.py

AUTH_USER_MODEL = 'accounts.User'

기본 User 모델이 아니기 때문에 등록하지 않으면 admin site에 출력되지 않습니다.

# accounts/admin.py

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User

admin.site.register(User, UserAdmin)

주의!! 프로젝트 중간에 AUTH_USER_MODEL을 변경 할 수 없습니다. 이미 프로젝트가 진행되고 있을 경우 데이터베이스 초기화 후 진행해야 합니다.

사용 User 테이블의 변화


프로젝트를 시작하며 반드시 User 모델을 대체해야 합니다.

  • Django는 새 프로젝트를 시작하는 경우 비록 기본 User 모델이 충분하더라도 커스텀 User 모델을 설정하는 것을 강력하게 권장하고 있습니다.
  • 커스텀 user 모델은 기본 User 모델과 동일하게 작동 하면서도 필요한 경우 나중에 맞춤 설정할 수 있기 때문입니다.

단, User 모델 대체 작업은 프로젝트의 모든 migrations 혹은 첫 migrate를 실행하기 전에 이 작업을 마쳐야 합니다.


참고

1. github 코드 참고

 

django/django/contrib/auth/models.py at main · django/django

The Web framework for perfectionists with deadlines. - django/django

github.com

 

2. User 모델 상속 관계

 

3. 'AbstractUser' class

 

4. Abstract base classes (추상 기본 클래스)

 

5. 유저 모델 대체하기 Tip

 

'백엔드' 카테고리의 다른 글

Django에 대하여(23)_Logout  (0) 2024.04.14
Django에 대하여(22)_Login  (0) 2024.04.13
Django에 대하여(20)_쿠키  (0) 2024.04.11
Django에 대하여(19)_HTTP  (0) 2024.04.10
Django에 대하여(18)_Media files  (0) 2024.04.09