[Django]Custom user manager

Django에서 custom user model을 만들 때, Django의 contrib 안에 있는 auth model을 상속해 오는 경우가 많다.

이 중에서 BaseUserManager에 대해 알아보도록 하자.

# models.py
from django.contrib.auth.models import BaseUserManager
# custom usermanager
class UserManager(BaseUserManager):
def create_user(self, email, password=None):
# raise error when email is none
if not email:
raise ValueError('email is required')
user = self.model(
email=self.normalize_email(email)
)
user.set_password(password)
user.save()

기본적인 custom user manager는 위와 같다. 물론 superuser도 같이 만들어줘야지만 일단은 일단 user에 대해서만…

user = self.model(
email=self.normalize_email(email)
)

normailize_email은 도메인을 lower_case로 바꿔주는 method이다. 예를 들면 springkjw@Gmail.com 이렇게 메일이 들어오면 springkjw와 Gmail.com을 분리 후 springkjw@gmail.com으로 다시 바꿔주는 녀석이다.

user.set_password(password)

set_password은 사용자가 입력한 passoword를 hash화 시켜주는 method이다. Django 내부에 만들어져 있는 make_password라는 function을 거치게 되는데 make_password은 다음과 같다.

# hashers.py
def make_password(password, salt=None, hasher='default'):
if password is None:
return UNUSABLE_PASSWORD_PREFIX + get_random_string(UNUSABLE_PASSWORD_SUFFIX_LENGTH)
hasher = get_hasher(hasher)

if not salt:
salt = hasher.salt()

return hasher.encode(password, salt)

이로 통해 유저가 password를 1234라 저장해도 실제로는 asfwaq12saAS 이런 식으로 변환된 뒤 저장되게 된다.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.