본문 바로가기
API/MySQL API

Python으로 Mysql 접속, 로그아웃 API

by 하니__ 2024. 5. 22.

 

 

1. API 설정

경로는 유저의 로그아웃으로 설정

 

HTTP 메소드는 아무래도 끝내는거니까 delete로

 

해서

 

2. app.py 설정

 

api.add_resource(UserLogoutResource, '/users/logout')

로 경로를 만들어준뒤

2 - 1. 로그아웃된 토큰으로 요청하는 경우, 처리하는 함수 작성
@jwt.token_in_blocklist_loader
def check_if_token_is_revoked(jwt_header, jwt_payload):
    jti = jwt_payload['jti']
    return jti in jwt_blacklist

를 app = flask 와 api = Api(app)

사이에 넣는다

 

이 함수는 jwt가 블랙리스트에 있는지 체크하게 되는데 

아래에서 후술할 블랙리스트가 언급이 되면 

 

콜백 되어 JWT 토큰이 검증될 때 호출

이 때 JWT 토큰의 해더(jwt_header)와 페이로드(jwt_payload)를 매개변수로 전달받는다

jwt_payload에서 JTI를 추출하여 블랙리스트에 있는지 확인

 

3. user.py 설정
jwt_blacklist = set()
class UserLogoutResource(Resource) :
    
    @jwt_required()
    def delete(self) :

 

클래스를 생성하고 그 위에

로그아웃된 토큰을 저장할 set을 만든다

 

그리고 함수 호출전 토큰을 필요하다는것을 알리기 위함을

의미하는 jwt_required() 를 작성한다

jti = get_jwt()['jti']
jwt_blacklist.add(jti)

return

 

jwt의 jti라는 식별자를 가져오기 위해 get_jwt를 사용한다

이는 고유한지 식별하는데 사용

 

그리고 블랙리스트에 추가함으로써

더이상 유효하지않음을 표시한다

 

이후 요청에서 블랙리스트에 추가된 토큰은 사용되지 못하게 된다

 

그리고 이 작업을 할때에

위에서 언급한 콜백함수가 작용하여 처리가 된다

 

 

테스트

 

 

 

 

그래서 정상 작동 할 때

로그아웃 후

 

재시도를 하면

 

 

토큰이 취소되었다는 메시지가 나오게 된다

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'API > MySQL API' 카테고리의 다른 글

Python으로 Mysql 접속, 회원 정보 수정 API  (0) 2024.05.24
Python으로 Mysql 접속, 회원탈퇴 API  (0) 2024.05.24
로그인 API  (0) 2024.05.22
회원가입 API  (0) 2024.05.22
게시글 비공개,공개하는 API  (0) 2024.05.21