데코레이터

DONGHYUN KOO·2020년 9월 18일
0

로그인 데코레이터

어떠한 페이지를 이용할 때, 사용자가 회원인지, 비회원인지를 판단하여
컨텐츠를 이용할 수 있도록 해야한다.
Http 성질 중 Steateless 라는 성질 떄문에 우리는 어떠한 컨텐츠를 사
용할 때 항상 사용자가 로그인이 이미 되어 있는지, 아닌지를 판단하여야 한다.
그래서 우리는 데코레이터를 이용해서, 어떠한 사용자가 회원만 가능한 컨테츠를
이용해서, 어떤 사용자가 회원만 가능한 컨텐트를 이용할 때 이를 쉽게 판단

데코레이터

데코레이터는 대상 함수를 wrapping하고, 이 함수 앞뒤로 꾸며질 구문에 대해서
손쉽게 재사용할 수 있도록 하는 또다른 함수

@decorater
def comment:
import jwt
import json

from django.http    import JsonResponse
from .models        import Account
from test01.settins import SECRET_KEY

def token_check(func):
	def wrapper(self, request, *args, **kwargs):
   
    	if "Authorization" not in request.headers: #header에 토큰값이 담겨있는지 확인한다.
			return JsonResponse({'error_code":"INVALID_LOGIN"}, status=401)

       encode_token = request.headers["Authorization"] #헤더의 토큰 값을 입력해준다.

        try:
            data = jwt.decode(encode_token, SECRET_KEY, algorithm='HS256') #데이터를 decode하여준다. encode할 때 썻던 id값을 추출하기 위해서 이다.               >           
            user = Account.objects.get(id = data["id"]) #id를 통해 user의 정보를 user에 담아준다.
            request.user = user #가장 중요한 부분이다. get을 통해 가져온 user의 정보를 request.user에 담아준다. 이는 후에 데코레이터를 붙혀줄 views에 사용된다.

        except jwt.DecodeError:
            return JsonResponse({"error_code":"INVALID_TOKEN"}, status=401)

        except User.DoesNotExist:
            return JsonResponse({"error_code":"UNKNOWN_USER"}, status=401)

        return func(self, request, *args, **kwargs) #리턴되는 requset의 값은 user을 정보를 담은 requset가 된다.

    return wrapper

참조 :https://velog.io/@seo_kk/2020-04-16-TIL-%EB%8D%B0%EC%BD%94%EB%A0%88%EC%9D%B4%ED%84%B0 블로그를 참조했습니다.

0개의 댓글