본문 바로가기
  • 콩's 코딩노트
백엔드

Flask 에서 JWT 사용하는 방법 (3) - 로그인한 유저만 처리할 수 있는 API에, 토큰 적용하는 방법

by Cong_S 2022. 6. 20.

앞선 두 포스팅을 통해 JWT로 id를 암호화해주었다면

JWT를 이용해 토큰값이 있는 회원가입되고 로그인된 유저만 

API를 처리할 수 있도록 만들어보자.

 

class RecipeListResource(Resource):
    # restful api 의 method 에 해당하는 함수 작성

    # @jwt_required() : 헤더 부분에 토큰이 없으면 처리를 안 해줌
    @jwt_required()
    def post(self) :
        # api 실행 코드를 여기에 작성

        # 클라이언트에서, body 부분에 작성한 json 을
        # 받아오는 코드
        data = request.get_json()

        user_id = get_jwt_identity()

        # 받아온 데이터를 디비 저장하면 된다.
        try :
            # 데이터 insert 
            # 1. DB에 연결
            connection = get_connection()

            # 2. 쿼리문 만들기
            query = '''insert into recipe
                    (name, description, cook_time, directions, user_id)
                    values
                    ( %s , %s , %s ,%s, %s);'''
            
            record = (data['name'], data['description'], data['cook_time'], data['directions'],  user_id  )

            # 3. 커서를 가져온다.
            cursor = connection.cursor()

            # 4. 쿼리문을 커서를 이용해서 실행한다.
            cursor.execute(query, record)

            # 5. 커넥션을 커밋해줘야 한다 => 디비에 영구적으로 반영하라는 뜻
            connection.commit()

            # 6. 자원 해제
            cursor.close()
            connection.close()

        except mysql.connector.Error as e :
            print(e)
            cursor.close()
            connection.close()
            return {"error" : str(e)}, 503

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

 

위는 로그인한 유저만 레시피를 수정할 수 있도록 API를 구성한 코드이다. 중요한 부분은 맨처음 부분이다.

 

class RecipeListResource(Resource):
    # restful api 의 method 에 해당하는 함수 작성

    # @jwt_required() : 헤더 부분에 토큰이 없으면 처리를 안 해줌
    @jwt_required()
    def post(self) :
        # api 실행 코드를 여기에 작성

        # 클라이언트에서, body 부분에 작성한 json 을
        # 받아오는 코드
        data = request.get_json()

        user_id = get_jwt_identity()

 

@jwt_required()를 함수가 시작되기 전에 작성해두면 해당 리소스는 클라이언트에서 요청할 때 헤더 부분에 토큰값이 없으면 처리를 하지 않도록 해준다.

 

다시 말하면 로그인하여 암호화된 id 값이 없으면 글을 작성할 수 없게 만든 것이다. 

 

그 아래 

 

user_id = get_jwt_identity()

부분은 암호화된 id를 다시 복호화하는 코드이다.

다시 복호화된 id로 필요한 데이터를 찾을 수 있다.

댓글