반응형
JWT 유효기간 만료시키는 방법
Config Class를 만든 파일에서 JWT_ACCESS_TOKEN_EXPIRES = True로 만들어 준다.
class Config :
JWT_SECRET_KEY = 'graphene911'
JWT_ACCESS_TOKEN_EXPIRES = True # False면 만료가 없다.
PROPAGATE_EXCEPTIONS = True
expires_delta=datetime.timedelta(minutes = 1)를 추가해준다.
( minutes = 1일 경우 1분 후 만료 )
# 로그인하는 API
class UserLoginResource(Resource) :
def post(self) :
# {
# "email": "abc@gmail",
# "password": "1234"
# }
# 1. 클라이언트가 body에 보내준 json을 받아온다.
data = request.get_json()
# 2. 이메일로 DB에 이 이메일과 일치하는 데이터를 가져온다.
try :
connection = get_connection()
query = '''select *
from user
where email = %s;'''
record = (data['email'],)
# select 문은, dictionary = True 를 해준다.
cursor = connection.cursor(dictionary = True)
cursor.execute(query, record)
# select 문은, 아래 함수를 이용해서, 데이터를 가져온다.
result_list = cursor.fetchall()
print(result_list)
# 중요! 디비에서 가져온 timestamp 는
# 파이썬의 datetime 으로 자동 변경된다.
# 문제는! 이데이터를 json 으로 바로 보낼수 없으므로,
# 문자열로 바꿔서 다시 저장해서 보낸다.
i = 0
for record in result_list :
result_list[i]['created_at'] = record['created_at'].isoformat()
result_list[i]['updated_at'] = record['updated_at'].isoformat()
i = i + 1
cursor.close()
connection.close()
print(result_list)
except mysql.connector.Error as e :
print(e)
cursor.close()
connection.close()
return {"error" : str(e)}, 503
# 3. 행이 result_list 행의 갯수가 1개이면
# user 데이터를 정상적으로 받아온 것이고
# 행의 갯수가 0이면, 요청한 이메일은
# 회원가입이 되어있지 않은 이메일이다.
if len(result_list) != 1 :
return {'error' : '회원가입인 안된 이메일입니다.'}, 400
# 4. 비밀번호가 맞는지 확인한다.
user_info = result_list[0]
# data['password'] 와 user_info['password']를 비교
check = check_password(data['password'], user_info['password'])
if check == False :
return {'error' : '비밀번호가 맞지 않습니다..'}, 400
# 토큰 유효기간 만료 시키는 방법
access_token = create_access_token(user_info['id'], expires_delta=datetime.timedelta(minutes = 1))
return {'result' : 'success', 'access_token' : access_token}, 200
반응형
'BackEnd' 카테고리의 다른 글
| API - email 주소형식이 제대로 된 주소형식인지 확인하는 코드 (0) | 2022.06.20 |
|---|---|
| API - PASSWORD 암호화 설정 방법 (0) | 2022.06.20 |
| API - 로그인한 유저만 처리할 수 있는 API에 JWT 토큰 적용하는 방법 (0) | 2022.06.20 |
| API - 회원가입 / 로그인 API에서, 토큰 생성해서 처리하는 방법 (0) | 2022.06.20 |
| API - Flask에서 JWT 설치방법 (0) | 2022.06.20 |