장고로 회원가입과 로그인 기능을 구현하고 확인 차 회원가입을 하고 로그인을 진행했는데 안되는 문제 발생!
원인을 찾던 중 데이터베이스를 확인해 보니 패스워드가 저장이 안되는걸 발견하게 됐다.
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', ''))
'코딩공부 > Django' 카테고리의 다른 글
DRF Permission으로 사용자의 접근 제어 (0) | 2022.11.14 |
---|---|
DRF 커스텀 유저 구현하기, access token의 payload 수정 방법 (0) | 2022.11.10 |
DRF Feedview 헤쳐보기 / TIL_221027 (0) | 2022.10.27 |
DRF JWT, CORS 란? / TIL_221026 (0) | 2022.10.26 |
Django 이미지 업로드 기능 구현 / TIL_221018 (0) | 2022.10.18 |
댓글