코딩공부/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', ''))