ex)
토큰 조회를 데코레이터로 만드는이유
1. 토큰의 조회는 하나의 로직에서만활용하는 것이 아니라 전반적으로 사용한다.
- 여러페이지에 인가하는 과정에서 토큰조회를 활용한다.
# utils.py
def token_reader(func):
def wrapper(self, request, *args, **kwargs):
try:
token = request.headers.get('Authorization', None)
# 1. 프론트의 http요청에서 headers를 조회해서 Authorization의 값을 조회해서 그 객체를 token에 담아라.
payload = jwt.decode(token, settings.SECRET_KEY, settings.ALGORITHM)
# 2. jwt라이브러리를 사용해서 token을 decode를 해서 payload에 넣어라
user = User.objects.get(id=payload['user_id'])
# 3. json형태인 payload에 key로 User DB를 조회해서 value값을 넣어라
request.user = user
except jwt.exceptions.DecodeError:
return JsonResponse({'message' : 'INVALID_TOKEN' }, status=400)
# 2번 과정에서 오류가생기면 토큰이 존재하지않다는 의미이므로 오류처리
except User.DoesNotExist:
return JsonResponse({'message' : 'INVALID_USER'}, status=400)
# 3번의 과정에서 오류가생긴다면 User DB에 id값이 존재하지않으므로 오류처리
return func(self, request, *args, **kwargs)
# 모든과정에서 오류가없다면 token_reader메소드에 인자로 넣어라
return wrapper
# views.py
class PostingView(View):
@token_reader
def post(self, request):
...
...
class CommentsView(View):
@token_reader
def post(self, request, posting_id):
...
...