[Django] 회원가입 및 로그인ver.3

제갈창민·2021년 12월 4일
0

learningbook

목록 보기
25/32
post-custom-banner

1. 회원가입(비번 암호화)

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 = () 로 이동시켜 한 문장으로 병합하였다.

2. 로그인

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 해와서 다시 건설하였고, 미처 발견하지 못했던 컨벤션 실수들도 수정해 가면서 재건축에 성공했다.

profile
자기계발 중인 신입 개발자
post-custom-banner

0개의 댓글