728x90
1. JWT(JSON Web Token)
- 당사자 간에 정보를 JSON 개체로 안전하게 전송하기 위한 개방형 표준
- 이 정보는 디지털 서명이 되어 있으므로 확인하고 신뢰 할 수 있음
- JWT는 암호화 알고리즘을 사용하거나 공용/개인키를 쌍으로 사용하여 서명 할 수 있음
- 쉽게 이해를 돕자면 로그인/아웃 기능을 구현하는 웹 토큰으로 이해하면 쉬움
2. 라이브러리 설치
pip install flask-jwt-extended
3. 라이브러리 호출
from flask_jwt_extended import create_access_token
회원가입 하는 코드는 아래와 같다. 코드 안에 주석처리로 설명이 쓰여있다.
from flask import request
from flask_restful import Resource
from mysql_connection import get_connection
from mysql.connector import Error
from email_validator import validate_email,EmailNotValidError
from datetime import datetime
from flask_jwt_extended import create_access_token
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
## user_id를 바로 클라이언트에게 보내면 안되고,
## JWT로 암호화해서 인증토큰을 보낸다.
access_token=create_access_token(user_id)
return {'result':'success','access_token':access_token}
user_id를 클라이언트에게 보내기 전에 JWT로 암호화해서 인증 토큰을 보내는 방법.
세이프티한 코드작성을 위해 config파일에
# JWT 관련 변수 셋팅
JWT_SECRET_KEY = 'yhacdemy20230105##hello'
JWT_ACCESS_TOKEN_EXPIRES = False
PROPAGATE_EXCEPTIONS = True
secret_key는 절대 노출이 되어서는 안된다. 실무에서는!!
from flask_jwt_extended import JWTManager
# JWT 매니저 초기화
jwt=JWTManager(app)
포스트맨으로 테스트
DB에서 확인
'Rest API' 카테고리의 다른 글
API 서버 - query string 페이징 처리 (0) | 2023.01.06 |
---|---|
API서버 - 로그아웃 기능 구현하기 (jwt 토큰 파괴) (0) | 2023.01.05 |
API - Postman 다운로드 , 사용법 (0) | 2023.01.04 |
API서버 - 클라이언트가 원하는 값 삭제하기 (DELETE) (0) | 2023.01.04 |
API서버 - 클라이언트에서 입력받은 값으로 DB 수정하기 (PUT) (0) | 2023.01.04 |