from flask import Flask
from flask_jwt_extended import JWTManager
from flask_restful import Api
from config import Config

from resources.recipe import RecipeListResource
from resources.recipe_info import RecipeResource
from resources.recipe_publish import RecipePublishResource
from resources.user import UserLoginResource, UserLogoutResource, UserRegisterResource, jwt_blacklist


app = Flask(__name__)

# 환경변수 셋팅
app.config.from_object(Config)

# JWT 토큰 라이브러리 만들기
jwt = JWTManager(app)

# 로그아웃 된 토큰이 들어있는 set을, jwt에 알려준다.
@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)

# 경로와 리소스(API 코드)를 연결한다.
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()

@jwt.token_in_blocklist_loader를 적고 함수를 만든다.

로그아웃된 토큰이 들어있는 set을, jwt에 알려준다.

# 로그아웃 기능을 하는 클래스
class UserLogoutResource(Resource):

    @jwt_required()
    def post(self):

        jti = get_jwt()['jti']
        print(jti)

        jwt_blacklist.add(jti)

        return {'result', 'success'}, 200

로그아웃 기능을 하는 클래스다. @jwt_required를 적어주고 jti를 만들고 집합에 넣어준다.

 

+ Recent posts