Westagram

GreenBean·2021년 5월 7일
0
post-thumbnail

JWT

✓ JWT Decorator

  • Class Ver. utils.py 일부
class LoginConfirm:
    def __init__(self, original_function):
        self.original_function = original_function
    
    def __call__(self, request, *args, **kwargs):
        token = request.headers.get("Authorization", None)
        try:
            if token:
                token_payload = jwt.decode(token, SECRET, algorithms='HS256')
                user          = User.objects.get(id=token_payload['user_id'])
                request.user  = user
                return self.original_function(self, request, *args, **kwargs)

            return JsonResponse({'MESSAGE': 'NEED_LOGIN'}, status=401)

        except jwt.ExpiredSignatureError:
            return JsonResponse({'MESSAGE': 'EXPIRED_TOKEN'}, status=401)
        
        except jwt.DecodeError:
            return JsonResponse({'MESSAGE': 'INVALID_USER_ERROR'}, status=401)
        
        except User.DoesNotExist:
            return JsonResponse({'MESSAGE': 'INVALID_USER_ERROR'}, status=401)
  • Def Ver. utils.py 일부
def login_confirm(original_function):

    def wrapper(self, request):
        try:
            token = request.headers.get("Authorization", None)
            if token:
                token_payload = jwt.decode(token, SECRET, algorithms='HS256')
                user          = User.objects.get(id=token_payload['user_id'])
                request.user  = user
                return original_function(self, request)

            return JsonResponse({'MESSAGE': 'NEED_LOGIN'}, status=401)

        except jwt.ExpiredSignatureError:
            return JsonResponse({'MESSAGE': 'EXPIRED_TOKEN'}, status=401)
        
        except jwt.DecodeError:
            return JsonResponse({'MESSAGE': 'INVALID_USER_ERROR'}, status=401)
        
        except User.DoesNotExist:
            return JsonResponse({'MESSAGE': 'INVALID_USER_ERROR'}, status=401)

    return wrapper

JWT 적용

token = request.headers.get("Authorization", None)
if token:
        token_payload = jwt.decode(token, SECRET, algorithms='HS256')
        user          = User.objects.get(id=token_payload['user_id'])
        request.user  = user
        return self.original_function(self, request, *args, **kwargs)

✓ Posting 적용

  • views.py 일부
class PostingView(View):
    @LoginConfirm
    def post(self, request):
        data  = json.loads(request.body)

        try:
            Posting.objects.create(
                user    = request.user,
                img_url = data['img_url']
            )
            return JsonResponse({'MESSAGE': 'POSTING_SUCCESS'}, status=201)

        except KeyError:
            return JsonResponse({'MESSAGE': 'KEY_ERROR'}, status=400)

        except:
            return JsonResponse({'MESSAGE': 'INVALID_USER_ERROR'}, status=401)

JWT 적용

@LoginConfirm
  • Result
    • Httpie
    • Database

✓ Comment 적용

  • views.py 일부
class CommentView(View):
    @LoginConfirm
    def post(self, request):
        data  = json.loads(request.body)

        try:
            if not User.objects.filter(email=data['user']).exists():
                return JsonResponse({'MESSAGE': 'INVALID_USER_ERROR'}, status=401)
            
            if not Posting.objects.filter(id=data['posting']).exists():
                return JsonResponse({'MESSAGE': 'DOES_NOT_EXIST_ERROR'}, status=401)

            Comment.objects.create(
                user     = request.user,
                posting  = Posting.objects.get(id=data['posting']),
                contents = data['contents']
            )
            return JsonResponse({'MESSAGE': 'COMMENT_SUCCESS'}, status=201)

        except KeyError:
            return JsonResponse({'MESSAGE': 'KEY_ERROR'}, status=400)

JWT 적용

@LoginConfirm
  • Result
    • Httpie
    • Database
profile
🌱 Backend-Dev | hwaya2828@gmail.com

0개의 댓글