API 개발/Restful API

Restful API : 로그아웃 API

신강희 2024. 5. 29. 12:57
728x90

< 로그아웃 API >

 

# 이번엔 자동 로그아웃이 아니라 직접 로그아웃 하는 API를 개발

- Postman 에서 우선 API 설계

- DELETE로 선택하고 HeadersKeyAuthorization, VALUE는 로그인하고 생성된 토큰Bearer 뒤에 입력해 주어야 한다!

 

# 이제 user.py 에 로그아웃 코드 작성

 
# 로그아웃 API => 다른 user API들에비해 복잡도가 있다!
# 로그아웃된 토큰을 저장할, set을 만든다.
jwt_blacklist = set()

class UserLogoutResource(Resource) :

    @jwt_required()
    def delete(self) :

        # 메뉴얼대로 작성하는것!
        jti = get_jwt()['jti']
        jwt_blacklist.add(jti)
        return
 

jwt_blacklist = set() 설정 해야 한다는점 주의!

 

# app.py에도 경로와 로그아웃 토큰 요청시 처리할 함수 작성

# 로그아웃된 토큰으로 요청하는 경우, 처리하는 함수 작성
@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.py 전체 코드

 
# API를 처리하는 코드는
# Resource 클래스를 상속받아서 작성한다.
# 이 클래스에는 get, post, put, delete 함수를 상속받는다.
# 따라서 이 함수들을, 우리의 서비스에 맞게 수정해서 사용하면된다.

from flask import Flask
from flask_restful import Api
# 생성한 API class 사용을위해서 생성시마다 import 필요!
from resources.recipe import RecipeListResource, RecipePublishResource, RecipeResource
from resources.user import UserLoginResource, UserLogoutResource, UserRegisterResource

from flask_jwt_extended import JWTManager
from config import Config

from resources.user import jwt_blacklist

app = Flask(__name__)

# 환경변수 셋팅 (jwt 사용을 위한)
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_blacklist

api = Api(app)

# 경로(path)와 리소스(API 코드)를 연결한다.
# <int> flask 문법임 외워야됨
api.add_resource( RecipeListResource , '/recipes')
api.add_resource( RecipeResource , '/recipes/<int:recipe_id>')
api.add_resource( RecipePublishResource , '/recipes/<int:recipe_id>/publish')
api.add_resource( UserRegisterResource , '/users/register')
api.add_resource( UserLoginResource, '/users/login')
api.add_resource( UserLogoutResource, '/users/logout')

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

ㄴ 로그아웃 API의 경우 @jwt.token_in_blocklist_loader  을 사용한 추가 함수 작성이 필요하다는점 주의!

 

다음 게시글로 계속~!

 

반응형