📝Flask에서 JWT 사용하기 (로그인/로그아웃 API 만들기)
새로운 파일인 유저 파일에 회원가입한 회원일때 비밀번호가 일치하면 로그인을 시켜주게 코드를 작성한다
※ app.py에 경로 설정 (api.add_resource(UserLoginResource, '/user/login')
class UserLoginResource(Resource) :
def post(self) :
# {"email": "abc@naver.com",
# "password": "1234"}
# 1. 데이터 받아오기
data = request.get_json()
# 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()
# 가져온 결과가 없을때 처리 (=회원가입 하지 않은 사람)
if len(result_list) == 0 :
return {"error" : "회원가입한 사람이 아닙니다"} , 400
# 시간을 문자열로 변환
i = 0
for row in result_list :
result_list[i]['created_at'] = row['created_at'].isoformat()
result_list[i]['updated_at'] = row['updated_at'].isoformat()
i = i + 1
cursor.close()
connection.close()
except Error as e :
print(e)
cursor.close()
connection.close()
return {"error" : str(e)}, 500
print(result_list)
# 3. 비밀번호가 맞는지 확인한다
check = check_password( data['password'], result_list[0]['password'] )
if check == False :
return {"error" : "비밀번호가 일치하지 않습니다"} , 400
# 4. JWT 토큰을 만들어서 클라이언트에게 보낸다
access_token = create_access_token( result_list[0]['id'] )
return {"result" : "success", "access_token" : access_token}, 200
로그아웃코드를 작성할때는 로그아웃 된 토큰을 저장할 셋(set)을 만들고(유저파일에 만든다)
app.py에 로그아웃된 토큰으로 요청하는 경우 처리하는 코드작성한다
# 로그아웃된 토큰으로 요청하는 경우 처리하는 코드작성
@jwt.token_in_blocklist_loader
def check_if_token_is_revoked(jwt_header, jwt_payload) :
jti = jwt_payload['jti']
return jti in jwt_blacklist
유저파일에 로그아웃 코드 작성
# 로그아웃된 토큰을 저장할 셋(set)을 만든다
jwt_blacklist = set()
class UserLogoutResource(Resource) :
@jwt_required()
def post(self) :
jti = get_jwt()['jti']
print(jti)
jwt_blacklist.add(jti)
return {'result' : 'success'}, 200
포스트맨에 테스트해본다
Headers에 Key는 Authorization, VALUE는 Bearer 토큰값을 입력
'Restful API' 카테고리의 다른 글
[Error] Object of type Decimal is not JSON serializable (0) | 2023.01.09 |
---|---|
[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 |
댓글