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