매번 server api 접근을 할 때마다 클라이언트로부터 보내오는 token 인증을 실시합니다. 하지만 Code Test 때첨 복붙 할 수는 없기 때문에 Decorator 함수를 사용합니다.
__check_token
데코레이터 함수가 아닌 클라이언트로부터 받은 Request에서 token을 뽑아내 인증 메소드를 통해 검토하는 raw method입니다
# Atom Function
def __check_token(request: Request) -> str:
# 실제 Token Checker Routine
try:
token: str = request.headers.get('Set-Cookie')
req_static_id: str = TOKEN_MANAGER.is_logined(token)
if not req_static_id:
e = MicrocloudchipLoginConnectionExpireError("Login expired")
raise e
except KeyError:
e = MicrocloudchipSystemAbnormalAccessError("Token is nothing - error")
raise e
else:
return req_static_id
line 5: 클라이언트로 받은 request 객체에서 cookie를 통해 token를 뽑아 옵니다
line 6: token manager를 통해 token 인증을 거칩니다. 올바른 token이 아니면 NoneType을 반환합니다.
line 7: 올바른 token이 아닐 경우 Error를 호출합니다.
line 10: cookie 안에 token이 아예 없어서 KeyError를 호출하는 경우도 있습니다.
line 14: 제대로 된 token이 맞으면 token에 해당되는 사용자 id를 반환합니다.
line 3: 그에 따라 해당 메소드의 맨 마지막 부분에 req static id가 추가되었습니다.
check_token_in_class_view
아까 위의 메소드는 DJango의 APIView 에서는 사용할 수가 없습니다. 그 이유는, Class 멤버 메소드가 아닌 일반 메소드일 경우, Request 객체가 맨 앞에 오지만, APIView는 객체 데이터인 self가 먼저 들어옵니다. 따라서 APIView 전용 Decorator 메소드를 따로 구현했습니다.