군침이 싹 도는 코딩
Flask 에서 JWT 회원가입 / 로그인 API에서 토큰 처리 방법 본문
from datetime import datetime
from flask import Flask, request
from flask_restful import Resource
from mysql.connector import Error
from mysql_connection import get_connection
from email_validator import validate_email, EmailNotValidError
from utils import hash_password
from flask_jwt_extended import create_access_token
class UserRegisterResource(Resource) :
def post(self) :
# {"username": "홍길동",
# "email": "abc@naver.com",
# "password": "1234"}
data = request.get_json()
#---------- 클라이언트가 보낸 데이터를 받아준다
try :
validate_email( data['email'] )
#---------- 이메일 주소형식이 올바른지 확인한다
if len(data['password']) < 4 or len(data['password']) > 12 :
return {'error':'비밀번호 길이 확인'}, 400
# --------- 비밀번호의 길이가 유효한지 체크한다 4자리 이상 12자리 이하라면
hashed_password = hash_password(data['password'])
# print(hashed_password) 암호화가 잘 됐는지 프린트해보고 주석처리
# --------- 비밀번호를 암호화
try :
connection = get_connection()
query = '''insert into user
(username, email, password)
values
(%s, %s, %s);'''
record = (data['username'], data['email'], hashed_password)
# --------- DB에 회원 정보를 저장하기 위해 쿼리문과 대체문을 만들어준다
cursor = connection.cursor()
cursor.execute(query, record)
connection.commit()
# --------- DB에 회원정보를 저장한다
user_id = cursor.lastrowid
# --------- DB에 저장된 user 테이블의 id 값을 가져오는 법
cursor.close()
connection.close()
# --------- 커서와 커넥션을 닫아준다
except Error as e :
print(e)
cursor.close()
connection.close()
return {'error':str(e)}, 500
# --------- 에러 처리
# config 파일에서 JWT_ACCESS_TOKEN_EXPIRES = True 했을 경우 파라미터에 만료일을 적어줘야한다
# 예시) create_access_token(user_id, expires_delta= datetime.timedelta(days=10))
# 해당 예시문에서는 False 이므로 따로 만료일 파라미터가 필요없다
access_token = create_access_token(user_id), 200
return {'result':'success','user_id':access_token}
# --------- user_id를 바로 클라이언트에게 보내면 안되고 JWT로 암호화 해서 인증토근을 보낸다
except EmailNotValidError as e :
print( str(e) )
return {'error':str(e)}, 400
# --------- 에러 처리
'Python > Flask' 카테고리의 다른 글
토큰 유효기간 만료 시키는 방법 (0) | 2023.01.05 |
---|---|
Flask 에서 JWT 사용 로그인한 유저만 처리할 수 있는 API에 토큰 적용하는 방법 (0) | 2023.01.05 |
Flask 에서 JWT 설치 방법 (0) | 2023.01.05 |
Python Flask에서 Resource 클래스를 이용한 API 서버 개발 방법 (0) | 2023.01.04 |
Python MySQL Connector 를 이용해 Delete 하는 방법 (0) | 2023.01.04 |