백엔드

JWT 로그아웃 API 만들기

Cong_S 2022. 6. 21. 10:15

로그인이 되었다면 로그아웃도 할 수 있어야한다.

로그아웃 API를 만들어보자.

 

1. 제일 먼저 로그아웃 클래스를 만든다.

 

함수가 시작하기 전에 jwt_required 붙여줌 

그 의미는 로그인한 유저만 로그아웃할 수 있기 때문이다.

 

jwt_blacklist = set()

 

2. blacklist set을 만들어 준다.

 

def post(self):

        jti = get_jwt()['jti']
        print(jti)

        jwt_blacklist.add(jti)

        return

 

3.  함수는 다음과 같이 작성해준다.

 

@jwt.token_in_blocklist_loader
def check_if_token_is_revoked(jwt_header, jwt_payload): 
    jti = jwt_payload['jti']
    return jti in jwt_blacklist

 

4. app.py 파일 (리소스를 모아 실행하는 파일)에 가서
JWTManager(app)
바로 밑에 위와 같은 코드를 작성해준다.

(위 코드는 처음부터 정해져 있는 코드이므로  따로 바꾸지말고 사용하자. )

 

이러면 완성이다.


 

일련의 과정을 풀이해보면 다음과 같다.

 

로그인이 된 토큰이 있다.

이 때 로그아웃 요청이 들어오면 해당 토큰 jwt에서 jti 를 뽑아서

jwt_blacklist 라는 set에 추가해준다.

 

이제 글을 작성한다던가 하는 로그인 권한이 필요한 기능을 수행할 때에

jwt_blacklist의 set을 훑게된다.

 

만약 같은 jti가 있다면 해당 토큰으  
Token has been revoked (토큰이 만료됨.)이라는 문구와 함께 권한이 부여되지 않는다.