반응형
JWT token으로 코드 짜기
- 미리 postman에 가서 세팅해둔다:
- 실행할 API의 header의 Key값을 Authorization로 설정한다.
- 여러 토큰의 형식 중에 하나인 Bearer을 Value에 입력해준다.
- -> Bearer 띄어쓰기 하고, 로그인 할 때의 access token을 입력한다.
- access token: user_id의 정보가 들어있는 것. 그것을 암호화 하여 전송하는 것.
- -> access token이 있어야 누가 API를 요청하는지 알수 있다.
- 우선 사용될 라이브러리는 하기와 같으며,
from http import HTTPStatus
from flask import request
from flask_jwt_extended import get_jwt_identity, jwt_required
from flask_restful import Resource
from mysql.connector.errors import Error
from mysql_connection import get_connection
import mysql.connector
from mysql_connection import get_connection
- 코드는 하기와 같다.
더보기
class RecipeListResource(Resource): @ jwt_required() # 무조건 header부분에 Authorization의 키 값이 있어야한다. def post(self): 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 Error as e: print(e) cursor.close() connection.close() return {"error": str(e)}, 503 return {"result":"success"},200 |
사용법:
- 함수 정의하기 전에 적어준다.
- jwt_required 역할: 해당 API를 호출하려면, header의 Bearer 뒤에 있는access token하고 같은지 확인하라는 뜻.
- 그리고 user_id를 받아와야한다. 로그인/회원가입 할 때도 user_id 필요.
- 그리고, 그 user_id를 가지고 access token이 생성된 것.
get_jwt_identity() |
- token으로부터 user_id를 다시 받아온다..
- 이 user_id를 가지고, 밑 쿼리에 user_id 변수명을 입력한다..
- header부분에 토큰이 없으면 서버가 요청 처리를 안해준다.
- user_id란을 추가하였음.
- 요청할 때도 전달하고, 회원/로그인할 때 서버에서 전달받고, 유저 로그인 API 데이터 호출 할 때, 같이 호출해줘야한다. 근데 아이러니하게도 이부분이 해킹의 위험이 가장 높은 부분이다.
- postman에 가서 테스트를 해본다.
- 잘 동작하는지 확인 했으면, mysql workbench에 가서 확인한다.
user_id가 각기 다른 것을 확인할 수 있다.
- header에 token이 없을 시 >>
- header에서 체크를 해제해고 요청을 보내면, 에러가 난다.
반응형
'BackEnd > Python-Flask' 카테고리의 다른 글
[백엔드] Flask: 로그인 API (0) | 2022.07.02 |
---|---|
[백엔드] Flask: 파이썬에서 JWT사용 (0) | 2022.07.02 |
[백엔드] Flask: 비밀번호 처리 : 비밀번호 로그인 체크 (0) | 2022.07.01 |
[백엔드] Flask: 비밀번호 처리 : 비밀번호 암호화 (0) | 2022.07.01 |
[백엔드] Flask: 터미널에 API 진행상황이 안나올 때 (0) | 2022.06.27 |