ruriruriya

[RESTful API] Python Flask - JWT 로그아웃 설정 방법 본문

☁️RestFul API (Python Flask)

[RESTful API] Python Flask - JWT 로그아웃 설정 방법

루리야ㅑ 2023. 12. 14. 08:00
반응형

회원가입/로그인/로그인 토큰 유효기간 설정까지 해보았다.

이제는 발급된 JWT로 해당 유저의 로그아웃을 해보자.

 

1. app.py 설정

JWT 매니저를 변수에 넣어 초기화한다.

그리고 아래 로그아웃 시
실행되지 않도록 하는 코드를 추가한다.

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

from flask import Flask
from flask_jwt_extended import JWTManager
from flask_restful import Api
from config import Config
from resources.recipe import RecipeListResource, RecipeMeListResource, RecipePublishResource, RecipeResource
from resources.user import UserLoginResource, UserLogoutResource, UserRegisterResource
# 로그아웃 관련된 임포트문
from resources.user import jwt_blocklist

# 기본 구조
app = Flask(__name__)

# 환경변수 세팅
app.config.from_object(Config)
# JWT 매니저를 초기화
jwt = JWTManager(app)

# 로그아웃된 토큰으로 요청하는 경우, 
# 실행되지 않도록 처리하는 코드.

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


api = Api(app)
api.add_resource(UserRegisterResource,'/user/register')
api.add_resource(UserLoginResource,'/user/login')
api.add_resource(UserLogoutResource,'/user/logout')



if __name__=='__main__':
    app.run()

 

2. 로그아웃 함수 추가

해당 클래스에 로그아웃 함수를 추가한다.

import datetime
from flask import request
from flask_jwt_extended import create_access_token, get_jwt, jwt_required
from flask_restful import Resource
from mysql_connection import get_connection
from mysql.connector import Error

from email_validator import validate_email, EmailNotValidError
from utils import check_password, hash_password


jwt_blocklist = set()
class UserLogoutResource(Resource) :

    @jwt_required()
    def delete(self) :
        
        jti = get_jwt()['jti']
        print(jti)

        jwt_blocklist.add(jti)

        return {"result" : "success"}, 200

 

3. 포스트맨에서 테스트

로그아웃 API를 새로 생성하여 URL 추가하고
Headers의 Authorization 키 값으로 생성된 토큰을 입력한다.
그리고 Send 하면 로그아웃이 성공적으로 되었단 메세지를 볼 수 있다.

반응형