어떠한 페이지를 이용할 때, 사용자가 회원인지, 비회원인지를 판단하여
컨텐츠를 이용할 수 있도록 해야한다.
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 블로그를 참조했습니다.