Python3/Django

[Django] Django에서 AbstractUser의 password 암호화, User모델 확장

Razelo 2022. 7. 15. 08:47

Django를 사용해서 서비스를 개발 중이라고 가정하자. 

 

우리는 보통 서비스를 만들때 User 모델을 정의하게 된다. 

 

사용자 비밀번호, 아이디, 이름, 이메일, 가입날짜 등등을 이 모델안에 정의하게 된다. 

 

그런데 이것만 가지고는 Django의 장점을 활용하기엔 부족하다. 

 

그래서 Django에서는 User모델을 확장할 수 있게 도와준다. 확장을 해야 진짜 Django의 간편함을 누릴 수 있다. 

 

어떻게 확장할까? 

 

바로 상속을 통해서 가능하게 해준다. 

 

User모델을 정의하고 나면 우리는 AbstractUser를 상속받게 할 수 있다. 

 

그리고 AbstractUser 안에는 username, password, email 등등의 기본적인 필드들이 존재한다. 미리 정의되어 있다. 

 

그리고 우리는 상속을 통해 그 필드들을 고스란히 사용할 수 있게 되는것이다. 

 

즉 한마디로 우리가 처음에 정의한 User모델을 확장시킨다고 보면 될 것이다. 

 

자 그렇다면 Django에서 AbstractUser를 상속받은 User모델은 password필드를 어떻게 활용할 수 있을까? 

 

Django에서는 password 해쉬를 통해서 암호화해서 저장하는 기능을 지원한다고 한다. 

 

그런데 이 기능이 그저 User객체를 create 해주고 이후 save 해줬다고 해서 자동으로 이루어질까? 

 

아니다. set_password 메서드를 써야만 가능하다. 

 

아래 예시가 있다. 예시대로 하면 password 를 encryption 시켜서 저장할 수 있다. 

    user = User(
             username=username
            ,user_id=user_id
            ,password=password
            ,phone_number=phone_number
            ,joined_date=joined_date)
    user.set_password(password) # password encryption 
    user.save()

위와 같이 우리는 User객체를 생성하고 난뒤에 바로 save 해주는게 아니라 set_password를 통해서 password필드를 암호화해주는 과정을 거쳐야만 한다. 

 

save이후에 set_password를 해도 소용없다. 반드시 save해주기 전에 이 과정이 이루어져야 한다. 

 

값을 꺼낼때 자동으로 복호화가 되는지에 대해서는 아직 잘 모르겠다. 이 부분은 직접 테스트해보고 난 뒤에 또 다른 포스트로 알려드리도록 하겠다. 

 

참고로 아래 블로그에서 도움을 받았다. 감사합니다. 

https://ko.code-paper.com/python/examples-user-set-password-password-django

 

사용자.set_password(암호)django - Python 샘플 코드

이 카테고리에서 인기 카테고리에 예제가 포함 된 인기있는 페이지

ko.code-paper.com

 

반응형