데코레이터를 적극 활용하자!
+ 다른 Design pattern 정리, 습득 하자!
지금까지의 로그인은 token 발행이 됬지만 재사용성이 떨어지는 코드였다.
로그인 후 token 발행 로직은 인가 과정이 많은 사이트 일수록 자주 쓰일 것이기 때문에
decorator를 통한 재사용성 확보가 중요하다.
향후 프로젝트에서도 이러한 방법을 통해 코드를 간결화 + 관리의 수월성을 확보 할 수 있을 것이다.
비단 decorator 뿐 아니라 factory, abstract factory등의 패턴은 수없이 쓰일 예정이므로 하루빨리 정리해 두자
(python의 factory는 많은 정보가 없던데,, 현업에서 안쓰이는건가? 아니면 다른 OOP언어의 설명을 참조 하는건가?)
def deco_login(func):
def wrapper(self, request, *args, **kwargs):
try:
given_token = request.headers.get("Authorization", None)
payload = jwt.decode(given_token, SECRET_KEY, algorithms='HS256')
user = Account.objects.get(id = payload['id'])
request.user = user
print("login succeed")
except jwt.exceptions.DecodeError:
return JsonResponse({"Error Message": "Invalid_token"}, status = 40)
except ObjectDoesNotExist:
return JsonResponse({"Error Message", "Id Dose Not Exist"}, status = 400)
return func(self, request, *args, **kwargs)
return wrapper
여기서 SECRET_KEY
와 argorithms
은 따로 보관하여 보안을 유지하는게 좋다.