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 |