작업 스케줄을 보니 오늘은 여유가 있을 줄 알았다
그런데 생각해보니 모든 api를 db에 저장하는 것만 만들었지 지우거나
다른 db테이블과 연동되는 api와 공유 헤더를 붙여야 하는 걸 까먹었다.
오늘도 밤을 새야할 것 같다.
앞으로 db, api를 만들 때는 항상 페어로 작업을 해야할 것 같다.
타임어택 이후 강의에서 배웠던 데코레이터 함수를 유저 인증이 필요한 곳에
랩핑해서 사용하고 있는데 너무 편하다.
def authrize(f):
@wraps(f)
def decorated_function(*args, **kws):
if not 'mytoken' in request.cookies:
abort(401)
user = None
token = request.cookies['mytoken']
try:
user = jwt.decode(token, SECRET_KEY, algorithms=['HS256'])
except:
abort(401)
return f(user, *args, **kws)
return decorated_function
쿠키값에 토큰이 없으면 Unauthorized에러를 내고 아니라면 쿠키에서
토큰을 가져와 디코드하고 디코드된 값을 유저에 담아 리턴하는 함수다.
@app.route('/home')
@authrize
def home(user):
if user is not None:
이런식으로 유저가 로그인 했을 때 쓸 수 있는 api를 불러 올 때마다 유저가
로그인 상태인지 확인하고 또 그에 맞는 id값을 편리하게 가져올 수 있다.
데코레이터 함수는 이런 인증절차 말고도 개인작업에서 코드를 효율적으로
줄여줄 것 같다. 팀프로젝트가 끝나고 개인적으로 뒤집어 까봐야 겠다.