Django_Account app API구현

NaHyun Kim·2020년 5월 23일
0

SIGN UP

import json
import bcrypt
import jwt

from django.views import View
from django.http import HttpResponse, JsonResponse
from .models import Account


class SignUpView(View):
    def post(self, request):

        data = json.loads(request.body)

        try:
            if Account.objects.filter(email=data['email']).exists():
                return JsonResponse({'message':'EMAIL_ALREADY_EXISTS'},status=400)
            hashed_password = bcrypt.hashpw(data['password'].encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
            Account.objects.create(
                        email = data['email'],
                        password = hashed_password,
                        name = data['name'],
                        nick_name = data['nick_name']
                )
            return JsonResponse({'message':'SUCCESS'}, status=200)
        except KeyError:
            return JsonResponse({'message':'INVALID_KEYS'}, status=400)

  • DB email 테이블에 이미 존재하는 email 인지 확인 한 후 있으면 오류 메세지 전송 없으면 DB저장 후 성공메세지

SIGN IN

class SignInView(View):
    def post(self, request):

        data = json.loads(request.body)

        try:
            if Account.objects.filter(email = data['email']).exists():
                if bcrypt.checkpw(data['password'].encode('utf-8'), Account.objects.get(email = data['email']).password.encode('utf-8')):
                    token = jwt.encode(
                            {'email':data['email']}, 'SECRET_KEY', algorithm='HS256').decode('utf-8')
                    return JsonResponse({'token':token},status=200)
                return JsonResponse({'message':'INVALID_USER'},status=401)
            return JsonResponse({'message':'INVALID_USER'},status=401)
        except KeyError:
            return JsonResponse({'message':'INVALID_KEYS'}, status=400)
  • 로그인 시 입력된 패스워드와 DB에 저장된 패스워드를 bcrypt.checkpw를 통해 확인 한 후 일치할 경우 payload, secret key, algorithm을 입력하여 JsonResponse로 토큰을 발행
  • 터미널에서 hostname -I 입력 후 내 IP 주소 확인 후 프론트엔드에게 전달 (IP주소:8000)
  • python manage.py runserver 0:8000로 서버를 열어서 연결 확인

0개의 댓글