로그인한 유저가 어떠한 정보를 요청할때 그 유저가 로그인한 유저가 맞는지 인증이된 유저인지 권한 확인을 해야한다. 하지만 매번 코드를 작성해 확인하면 코드가 많이 더러워지고 효율성도 엄청 떨어질 것이다. 그래서 미리 유저를 인증하는 로직을 만든 후 그 로직을 데코레이터를 이용해 필요할때 마다 사용한다.
추상화 모델을 만들때 사용했던 core앱에 utils.py를 만들어준 후 코드를 작성해 주었다. 일단 wraps
를 임포트 해준후 내장함수 위에 선언해 주었다. 여기서 데코레이터의 특징은 데코레이터를 사용하면 내장 함수의 속성을 잃어버린다는 것이다. 이러한 문제점을 방지하기 위해서 wraps
함수를 사용해 주었다.
access token은 HTTP request의 header에서 값을 보내기 때문에 우리는 header의 값을 get해줘야한다. 그리고 Authorization의 값을 가져오고, 값이 없다면 None으로 넘긴다.
payload는 디코딩을 하면 나오게 될 사용자에 대한 정보를 담을 변수. 여기서 SECRET KEY와 algorithms에 대한 정보는 토큰 발행시 넣었던 정보와 일치해야한다. 디코딩 해서 나온 사용자에 대한 정보와 매칭되는 사용자 정보를 불러오고, user라는 변수에 저장한다.
Request에 user 변수를 저장해 데코레이터 다음에 나오는 함수에서 사용한다. 토큰 정보를 확인하는 HTTP Requeset에는 토큰을 제외하고는 사용자 정보가 들어오지 않기 때문에 user변수에 값을 저장한다.
그 후 예외처리를 해준후 사용자 권한을 확인할 필요가 있을때마다 데코레이터를 이용해 사용해주면 된다.