RestFul API

JWT(양방향) 암호화 로그인 API 만들기

567Rabbit 2024. 5. 22. 16:35

로그인 API 만들기

 

 

 

 

 

app.py에 삽입

 

from resources.user import UserLoginResource

api.add_resource( UserLoginResource, '/users/login')

 

 

app.py 파일에 추가

 

from flask_jwt_extended import JWTManager
from config import Config

# app = Flask(__name__) 아래에 추가

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

# JWT 매니저 초기화
jwt = JWTManager(app)

# api = Api(app) 위에 추가

 

 

 

 

 

 

user.py에 삽입

 

from utils import check_password  #4에서 삽입
from flask_jwt_extended import create_access_token


class UserLoginResource(Resource) :
    
    def post(self) :
        
        # 1. 클라이언트로부터 데이터를 받는다.
        data = request.get_json()

        if 'email' not in data or 'password' not in data:
            return {'result' : 'fail'}, 400
        if data['email'].strip() == '' or data['password'].strip() == '':  
            return {'result' : 'fail'}, 400
        
        # 2. DB로부터 이메일에 해당하는 유저 정보를 가져온다.
        try :
            connection = get_connection()
            query = '''select *
                        from user
                        where email = %s ;'''
            record = ( data['email'] ,  )
            cursor = connection.cursor(dictionary=True)
            cursor.execute(query, record)

            result_list = cursor.fetchall()

            print(result_list)

            cursor.close()
            connection.close()

        except Error as e:
            if cursor is not None:
                cursor.close()
            if connection is not None:
                connection.close()
            return {'result':'fail', 'error':str(e)},500

        # 3. 회원인지 확인한다.
        if result_list == [] :
            return {'result' : 'fail'} , 401

        
        # 4. 비밀번호를 체크한다.
        
        # 유저가 입력한 비번 data['password']
        # DB에 암호화된 비번 result_list[0]['password']
        isCorrect = check_password(data['password'] , result_list[0]['password'])
        if isCorrect == False :
            return {'result' : 'fail'} , 401

       
       # 5. 유저아이디를 가져온다.
        user_id = result_list[0]['id']

        # 6. JWT 토큰을 만든다.
        access_token = create_access_token(user_id)

        # 7. 클라이언트에 응답한다.
        return {'result' : 'success', 'access_token':access_token}

 

 

 

 

 

 

로그인 한 유저만 사용할 수 있도록 API에 토큰 적용하기

 

 

recipe.py에 삽입

 

from flask_jwt_extended import get_jwt_identity, jwt_required

 

 

 

(1). Class RecipeListResource 의 def post  : 데이터 생성하기

 

 

 

 

 

 

(2). Class RecipeListResource 의 def get   : 데이터 모두 가져오기

 

 

 

 

 

 

(3). class RecipeResource의 def get : 특정 id 데이터 가져오기

 

 

# 2-2 삽입하고 , # 3 ~ 삭제하기

 

 

 

 

 

(4). class RecipeResource의 def put : 특정 id 데이터 수정하기

 

 

 

 

 

 

(5). class RecipeResource의 def delete : 특정 id 데이터 삭제하기

 

 

 

 

 

 


(6). class RecipePublishResource의 def put : 레시피 발행 (publish =1)

 

 

 

 

 

 

 

(7). class RecipePublishResource의 def delete :  레시피 발행 취소 (publish =0) : 임시저장

 

 

 

 

 

저장하고 flask run

 

 

 

 

 

 

 

 

>>>> 사용할 API의 Headers를 변경해준다.


Body에 Value를 Bearer + 암호키 넣고 send하면 success 된다. (암호키는 로그인에서 가져온 암호키를 복붙한다)

 

 

>>> 나머지도 변경해준다