Admin 페이지에서 확인해 보면 입력한 비밀번호가 평문으로 표기되어 있다.
이 비밀번호를 암호화 해서 저장하는 경우를 만든다.
작성하고 있는 views.py 코드 상단에 make_password 를 import 해 온다.
from django.contrib.auth.hashes import make_password
...
...
...
member = BoardMember(
username=username,
password=make_password(password),
email=email,
)
member.save()
비밀번호를 password=password 로 그대로 담는 것이 아니라 make_password() 라는 함수를 사용했다. 이는 회원 가입 시 입력한 password 를 암호화 한 뒤 저장하게 한다.
관리자 페이지를 확인해 보면 적용 이후 가입한 계정의 패스워드는 암호화 되어 저장된 것을 확인할 수 있다.
그런데 문제가 있다.
앞서 만든 회원가입 필드에 아무 입력도 하지 않고 submit 을 누르면 아무 에러도 나지 않았다.
관리자 페이지를 들어가보면 그냥 빈 문자열로 회원가입된 사용자가 생성된 것을 확인할 수 있다.
아까 패스워드와 패스워드 확인이 서로 다를 때처럼, 값들을 필드에 입력하지 않은 상황에서도 마찬가지로 예외 처리를 해 주어야 한다.
기존 코드를,
elif request.method == 'POST':
username = request.POST['username']
email = request.POST['email']
password = request.POST['password']
re_password = request.POST['re_password']
아래와 같이 바꾼다.
elif request.method == 'POST':
username = request.POST.get('username', None)
email = request.POST.get('email', None)
password = request.POST.get('password', None)
re_password = request.POST.get('re_password', None)
request.POST 가 딕셔너리 형태이므로 key 가 없으면 에러가 난다.
None 을 지정하는 것은 키에 대한 값이 없으면 기본값으로 None 을 지정한다는 의미라 한다.
근데 사실 print 를 해 보면,
username = request.POST['username'] 과
username = request.POST.get('username', None) 은 동일하게 나오는데 무슨 차이인지 잘 모르겠다.
어쨋든 수정하고 res_data = {} 아래에 조건문을 추가한다.
if not (username and email and password and re_password):
res_data['error'] = '모든 값을 입력해야 합니다'
이제 빈 문자열이 들어오게 되면 회원가입 창에 에러 메시지가 뜬다.
from django.shortcuts import render
from django.http import HttpResponse
from django.contrib.auth.hashers import make_password
from .models import BoardMember
def register(request):
if request.method == "GET":
return render(request, 'register.html')
elif request.method == "POST":
#print (request.POST)
username = request.POST.get('username', None)
#print(username)
password = request.POST.get('password', None)
#print(password)
re_password = request.POST.get('re_password', None)
#print(re_password)
email = request.POST.get('email', None)
res_data = {}
if not (username and password and re_password and email):
res_data['error'] = '모든 값을 입력하세요!'
elif password != re_password:
res_data['error'] = '비밀번호가 다릅니다'
print(res_data)
else:
member = BoardMember(
username = username,
email = email,
password = make_password(password)
)
member.save()
return render(request, 'register.html', res_data)