[DJANGO]미니 인스타그램 만들기⑥로그인 JWT 발급

박민하·2022년 6월 19일
0

PROJECT

목록 보기
9/17
post-thumbnail

로그인&회원가입 정도만 지원하는 초미니 인스타그램을 구동할 수 있는 API 시스템을 만들어보자!


✅ 로그인 로직 변경

✔ jwt 설치

$ pip install pyjwt

✔ View 내용 추가 및 수정

  • 이전 포스팅에서 비밀번호 암호화 로직을 적용했기 때문에 이에 맞게 로직을 변경 필요.
  • bcrypt의 checkpw method을 이용하여 비밀번호 확인 로직 추가.
  • 비밀번호가 틀렸을 때 적절한 에러를 반환.
  • 로그인 성공시 JWT의 payload에 로그인 한 user의 id를 담아서 발급.
  • 발급한 JWT를 응답의 데이터로 반환.
#views.py
...
import jwt    #권한이 있는지 확인 후 토큰을 발급해주는 라이브러리 추가
...
class SignInView(View):
    def post(self, request):
        try:
            data = json.loads(request.body)
            user = User.objects.get(email=data['email'])
            # 받은 email과 동일한 email을 가진 인스턴스를 User class에서 가져옴

            if not bcrypt.checkpw(data['password'].encode('utf-8'), user.password.encode('utf-8')):
                return JsonResponse({"message" : "INVALID_USER"}, status=401)
            
            access_token = jwt.encode({"id" : user.id}, settings.SECRET_KEY, algorithm = settings.ALGORITHM)
            #json 웹 토큰 생성

            return JsonResponse({
                 "access_token" : access_token
            }, status=200)

        except KeyError:
            return JsonResponse({'message':'KEY_ERROR'}, status=400)
        except User.DoesNotExist:
            return JsonResponse({"message" : "INVALID_USER"}, status=401)

✔ 로그인

http -v POST 127.0.0.1:8000/users/signin email='sunnyday@gmail.com' password='TJsl'

  사실 이 사진은 validation이 적용이 안 된 패스워드로 가입된 경우다. 토큰 확인용으로는 문제 없으니까 쓴다.

profile
backend developer 🐌

0개의 댓글