반응형
< 로그아웃 API >
# 이번엔 자동 로그아웃이 아니라 직접 로그아웃 하는 API를 개발
- Postman 에서 우선 API 설계
- DELETE로 선택하고 Headers에 Key는 Authorization, 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 을 사용한 추가 함수 작성이 필요하다는점 주의!
다음 게시글로 계속~!
728x90
반응형
'API 개발 > Restful API' 카테고리의 다른 글
Restful API : 네이버 검색 API 사용 방법 (requests 라이브러리 사용법) (0) | 2024.05.31 |
---|---|
Restful API : JWT 토큰 유효기간 만료 시키는 방법 (timedelta) (0) | 2024.05.29 |
Restful API : 로그인한 유저만 처리할수 있는 API에, 토큰 적용하는 방법 (0) | 2024.05.28 |
Restful API : 회원가입/로그인 API 에서, 토큰(JWT) 생성해서 처리하는 방법 (0) | 2024.05.28 |
Restful API : Flask 에서 JWT 사용하는 방법 (설치방법 및 flask에서 설정방법) (0) | 2024.05.24 |