작성일 댓글 남기기

bottle 에서 로그인여부를 확인하는 방식


처음엔 몰라서 각 함수마다 맨처음에 로그인 체크하고
로그인이 안되어 있으면 다른페이지로 리프레쉬되는 메타태크 문자열을 리턴했다.
로그인 되어있으면 다음코드를 진행하고…

각 함수마다 이렇게 해놓으니 지저분하고 유지보수도 짜증날 것 같아서 간단한 방법이 없을까 찾아봤다.

로그인여부가 필요한 함수에 로그인을 체크하고 처리하는 데코레이터를 붙여서 처리했다.

예,

1
2
3
4
5
@route('/rsyslog/list')
@route('/rsyslog')
@authenticated
def get_list():
    return "Get Some List"

로그인 했을 때만 사용할 수 있는 페이지를 뿌려주는 함수에 authenticated 라는 데코레이터를 붙인다.

authenticated를 이렇게 만든다.

1
2
3
4
5
6
7
8
def authenticated(func):
    def wrapped(*args, **kwargs):
        if check_login():
            return func(*args, **kwargs)
        else:
            redirect('login')
      
    return wrapped



로그인이 되어 있으면 인자로 넘어온 함수를 그대로 리턴하고
그렇지 않으면 로그인페이지로 넘긴다.