[1st Project] IKEA - login_decorator

김광일·2022년 3월 13일
0

PROJECT

목록 보기
3/5
post-thumbnail

이번엔 로그인과 회원가입 뒤에 진행한 로그인 데코레이터에 대해서 적어본다.

# users > decorator.py
def login_decorator(func):
    @wraps(func)
    def wrapper(self, request, *args, **kwargs):
        try:
            access_token = request.headers.get('Authorization', None)
            payload      = jwt.decode(access_token, SECRET_KEY, ALGORITHM)
            user         = User.objects.get(id = payload["id"])
            request.user = user  #1
             
            return func(self, request, *args, **kwargs)

        except jwt.DecodeError:
            return JsonResponse({"message" : "INVALID_TOKEN"}, status = 401)
        
        except User.DoesNotExist:
            return JsonResponse({"message" : "INVALID_USER"}, status = 401)

    return wrapper

처음엔 이 데코레이터 또한 유효성 검사 중 하나라고 판단하여, utils.py 안에 같이 넣었었지만, 가독성도 떨어지기에 따로 관리됨이 마땅하다 판단되어 decorator.py 라는 파일을 만들어 관리하기로 하였다.

내가 여기서 기억하고 넘어가야할 부분이 한가지 있다.
이전 위스타그램에서 데코레이터를 작성할 때만해도 #1 부분이 이해가 되지 않았지만, 시간도 없고, 다들 그냥 그렇게 사용한다기에 나도 그렇게 따라갔다.
하지만 이번에 다시 한번 이를 사용하는 상황에 의미없는 복붙은 용납할 수 없었다.
내가 이해한 바, 그리고 멘토님이 조언해주신 바에 따르면, #1 부분의 의미는
request 객체에 user 라는 property를 생성해서 해당 request객체가 user 정보를 담아다주는 매개체 역할을 하는 것이다.
그렇기 때문에 앞선 포스팅에서 언급한 payloadid 키 값을 여기서 맞춰주어야 한다는 것이다.

profile
부족함 없이 공부하자

0개의 댓글