코딩공부/Django

Django password 암호화 / TIL_221017

Dong_Devlog 2022. 10. 17. 19:49

장고로 회원가입과 로그인 기능을 구현하고 확인 차 회원가입을 하고 로그인을 진행했는데 안되는 문제 발생!

원인을 찾던 중 데이터베이스를 확인해 보니 패스워드가 저장이 안되는걸 발견하게 됐다.

 

 AbstractUser를 사용하여 장고에서 제공하는 user 필드에 핸드폰번호, 주소만 추가하고 나머지는 그대로 사용

회원가입할 때 username, password, phone, address를 저장하기 위해 아래와 같이 코드를 짰는데 패스워드가 저장이 안된 던 것!! 확인해보니 장고에서는 패스워드를 암호화하지 않으면 저장이 안된다.

 

models.py

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


class User(AbstractUser):
    phone = models.CharField("핸드폰번호", max_length=20)
    address = models.TextField("주소")

views.py

def signup(request):
    if request.method == 'GET':
        return render(request, 'signup.html')
            
    if request.method == 'POST':
        user = User()

        user.username = request.POST.get('username', '')
        user.password = (request.POST.get('password', ''))
        user.phone = request.POST.get('phone', '')
        user.address = request.POST.get('address', '')
        user.save()

        return redirect('/login/')

 

아래와 같이 set_password 함수를 사용하면 패스워드를 암호화해서 저장하게 됨.

동작하는 원리는 salt 값과 password, 메타 정보들을 취합해서 encode 한다고 하는데 아직 이해가 안감.

 

아무튼 이렇게 간단하게 문제를 해결할 수 있다.

        user.set_password(request.POST.get('password', ''))