📝Flask에서 JWT 사용하기 (회원가입 API 만들기)
우선 JWT를 사용하기 위해 설치를 먼저 해준다
pip install flask-jwt-extended
컨픽(Config)파일 클래스 안에 JWT관련 변수를 셋팅해준다
class Config :
# JWT 관련 변수를 셋팅
JWT_SECRET_KEY = '1234'
JWT_ACCESS_TOKEN_EXPIRES = False # 만료없이 설정
PROPAGATE_EXCEPTIONS = True # 에러가 나면 보여줄것
app.py의 환경변수 셋팅 밑에 JWT매니저 초기화 코드를 입력해준다
from flask import Flask
from flask_jwt_extended import JWTManager
from flask_restful import Api
from config import Config
app = Flask(__name__)
# 환경변수 셋팅
app.config.from_object(Config)
# JWT 매니저 초기화
jwt = JWTManager(app)
api = Api(app)
if __name__ == '__main__' :
app.run()
회원가입 API에서 토큰 생성해서 처리하는 코드를 작성
※ 이메일 주소가 올바른지 확인하기위해 라이브러리 인스톨해줬다 pip install email-validator
비밀번호 암호화는 pbkdf2_sha256 사용 (https://coding-jisu.tistory.com/189)
from datetime import datetime
from flask import request
from flask_jwt_extended import create_access_token
from flask_restful import Resource
from myspl_connection import get_connection
from mysql.connector import Error
from email_validator import validate_email, EmailNotValidError
from utils import hash_password
class UserRegisterResource(Resource) :
def post(self) :
#{"username": "홍길동",
#"email": "abc@naver.com",
#"password": "1234"}
# 이렇게 입력받을 데이터를 셋팅해두고 코드를 작업하면 편하다
# 1. 클라이언트가 보낸 데이터를 받아준다
data = request.get_json()
# 2. 이메일주소 형식이 올바른지 확인한다
try :
validate_email( data["email"] )
except EmailNotValidError as e :
print(str(e))
return {'error' : str(e)}, 400
# 3. 비밀번호의 길이가 유효한지 체크한다
# 비번이 4자리 이상 12자리 이하면 에러 (정상이 아닐때 코드를 먼저 작성)
if len(data["password"]) < 4 or len(data["password"]) > 12 :
return {'error' : '비밀번호 길이 확인'}, 400
# 4. 비밀번호를 암호화한다(기존에 만든 코드를 활용)
hashed_password = hash_password(data["password"])
print(hashed_password)
# 5. DB에 회원정보를 저장한다
try :
connection = get_connection()
query = '''insert into user
(username, email, password)
values
(%s, %s, %s);'''
record = (data["username"], data["email"], hashed_password)
cursor = connection.cursor()
cursor.execute(query, record)
connection.commit()
# DB에 회원가입하여 insert 된 후에 user테이블의 id값을 가져오는 코드
user_id = cursor.lastrowid
cursor.close()
connection.close()
except Error as e :
print(e)
cursor.close()
connection.close()
return {"error" : str(e)}, 500
# 보안상 유저 아이디를 바로 클라이언트에게 보내면 안되고 JWT로 암호화해서 인증토큰을 보낸다
access_token = create_access_token(user_id) # 여러개는 딕셔너리로 입력
return {"result" : "success", "access_token" : access_token}, 200
※ create_access_token(user_id, expires_delta= datetime.timedelta(minutes=30))에서
expires_delta=는 인증토큰 만료 시간주는 것이다
포스트맨에서 회원가입 테스트를 해보자
※ success라 나오고 암호화된 인증토큰이 나온다
'Restful API' 카테고리의 다른 글
[Restful API] Query String 페이징 처리하기 (0) | 2023.01.06 |
---|---|
[Restful API] Flask에서 JWT 사용하기 (로그인/로그아웃 API 만들기) (0) | 2023.01.05 |
[Restful API] pbkdf2_sha256으로 비밀번호 암호화시키기 (0) | 2023.01.04 |
[Restful API] MySQL 접속을 위한 유저를 따로 만들기 (0) | 2023.01.04 |
[Restful API] Config 파일 만들기 (0) | 2023.01.04 |
댓글