import json, bcrypt
from django.views import View
from django.http import JsonResponse
from django.core.exceptions import ValidationError
from users.models import User
from users.validation import validate_check
class SignUpView(View):
def post(self, request):
data = json.loads(request.body)
try:
user_name = data['name']
user_email = data['email']
user_password = data['password']
user_phone = data['phone']
hased_pw = bcrypt.hashpw(user_password.encode('utf-8'), bcrypt.gensalt())
decoded_hashed_pw = hased_pw.decode('utf-8')
user_create = User(
name = user_name,
email = user_email,
password = decoded_hashed_pw,
phone = user_phone,
)
validate_check(
user_email,
user_password,
)
user_create.full_clean()
user_create.save()
return JsonResponse({'message':'SUCCESS'}, status=201)
except KeyError:
return JsonResponse({'message':'KEY_ERROR'}, status=400)
except ValidationError as e:
return JsonResponse({'message':e.messages}, status=400)
-> bcrypt 를 이용한 비밀번호 암호화를 적용하고, 수십번의 수정 끝에 현재와 같은 코드 라인업이 만들어 졌다.
-> hased_pw 를 try문 위에(바깥에) 두었고, 변수값이 아닌 data[password] 로 직접 받는 형식을 취했더니 다음과 같은 comment를 받았다.
그래서 암호화하는 부분을 try안으로 옮기면서 변수로 설정한 값을 받아오는 것으로 수정했다.
--> 추가로, 두 줄로 되어있는 암호화 과정을 create 안에 있는 password = () 로 이동시켜 한 문장으로 병합하였다.
class SignInView(View):
def post(self, request):
try:
data = json.loads(request.body)
user_email = data['email']
user_password = data['password']
if not User.objects.filter(email=user_email, password=user_password).exists():
return JsonResponse({'message':'INVALID_USER'}, status=401)
return JsonResponse({'message':'SUCCESS'}, status=200)
except KeyError:
return JsonResponse({'message':'KEY_ERROR'}, status=400)
-> jwt를 적용한 토큰 생성법을 아직 적용하지 못한 상태다.
-> test로 만든 branch에서 이것저것 실험해 보다가 원인불명의 사유로 코드들이 conflict 되면서 뒤섞여 버렸었다.
-> 이전 버전을 main 으로 pull 해와서 다시 건설하였고, 미처 발견하지 못했던 컨벤션 실수들도 수정해 가면서 재건축에 성공했다.