Decorator를 활용한 인가

한준수·2020년 6월 19일
0

Django

목록 보기
7/8

데코레이터를 적극 활용하자!
+ 다른 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_KEYargorithms은 따로 보관하여 보안을 유지하는게 좋다.

profile
One Step More

0개의 댓글