드레:
코딩 뿌시기
드레:
전체 방문자
오늘
어제
  • 분류 전체보기 (268)
    • Python (74)
      • Python 기초 (42)
      • Numpy (8)
      • Pandas (22)
    • Machine Learning (31)
      • Machine Learning (1)
      • Deep Learning (27)
    • AWS (22)
      • RDS (3)
      • EC2 (9)
      • Lambda (8)
      • S3 (2)
    • MySQL (24)
    • Git (8)
    • Streamlit (12)
    • REST API (22)
    • Java (24)
    • Android (36)
    • Debugging (15)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 네이버 API
  • 깃이그노어
  • Ann
  • flask
  • Callback
  • 안드로이드 스튜디오
  • Lambda
  • fine tuning
  • EC2
  • serverless
  • pandas
  • rest api
  • 서버리스
  • CNN
  • Retrofit2
  • API
  • JWT
  • GET
  • Java
  • aws s3
  • AWS Lambda
  • github
  • 액션바
  • Python
  • Transfer Learning
  • AWS
  • 딥러닝
  • volley
  • Streamlit
  • tensorflow

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
드레:

코딩 뿌시기

API서버 - Flask JWT를 사용한 로그아웃 API 만들기
REST API

API서버 - Flask JWT를 사용한 로그아웃 API 만들기

2023. 1. 5. 22:30

 

1. 로그아웃 API

from flask_restful import Resource
from flask_jwt_extended import jwt_required, get_jwt

# 로그아웃된 토큰을 저장할 set을 만든다.
jwt_blocklist = set()

class UserLogoutResource(Resource):

    @jwt_required()
    def post(self):
        # print(get_jwt())
        jti = get_jwt()['jti']
        # print(jti)
        jwt_blocklist.add(jti)

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

중복을 방지하기 위해 blocklist를 set으로 만들고

메소드를 실행하면 현재의 access_token을 blocklist에 추가한다.

 

2. 메인파일

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

from resources.user import UserRegisterResource, UserLoginResource, UserLogoutResource
from resources.user import jwt_blocklist


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

# JWT 매니저 초기화(initialize)
# JWTManager(app)을 설정해줘야 flask istance에서 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()

@jwt.token_in_blocklist_loader 데코레이터 다음 부분은 콜백함수로,

blocklist에 포함된 token으로 요청이 들어오면 요청을 거부한다.

 

 

3. 포스트맨으로 테스트

현재 로그인 한 사람의 token을 헤더에 주고 로그아웃을 실행했다.

 

이 token으로 로그인이 필요한 다른 API를 실행하면 어떻게 될까?

 

만료된 토큰이기 때문에 에러가 발생했다.

 

비주얼 스튜디오 코드의 에러창에도 RevokedTokenError라고 명시되어 있다..

 

'REST API' 카테고리의 다른 글

Flask - PROPAGATE_EXCEPTIONS에 대한 이해  (0) 2023.01.06
Flask에서 JWT 사용하기 (flask-jwt-extended)  (0) 2023.01.05
API서버 - Flask JWT를 사용해 로그인 한 유저만 처리하는 API 만들기  (0) 2023.01.05
API서버 - Flask JWT를 사용한 로그인 API 만들기  (0) 2023.01.05
API서버 - Flask JWT를 사용한 회원가입 API 만들기  (2) 2023.01.05
    'REST API' 카테고리의 다른 글
    • Flask - PROPAGATE_EXCEPTIONS에 대한 이해
    • Flask에서 JWT 사용하기 (flask-jwt-extended)
    • API서버 - Flask JWT를 사용해 로그인 한 유저만 처리하는 API 만들기
    • API서버 - Flask JWT를 사용한 로그인 API 만들기
    드레:
    드레:

    티스토리툴바