반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- serverless
- 데이터베이스
- 자바초보
- RESTful API
- Matplotlib 기초
- Streamlit기본
- 파이썬공부
- JavaScript
- 스트림릿 기본
- java
- db
- 판다스공부
- 웹대시보드 제작
- 안드로이드 앱 개발
- Android
- 판다스
- 자바
- 스트림릿
- 안드로이드 스튜디오
- 파이썬
- 자바스크립트 공부
- 자바기초
- Streamlit기초
- 자바공부
- 웹대시보드 기초
- MySQL
- streamlit
- Pandas
- 자바스크립트
- 자바프로그래밍
Archives
- Today
- Total
ruriruriya
[RESTful API] Python Flask - JWT 로그인한 유저 토큰 유효기간 만료시키는 방법(expires_delta= ) 본문
Python Flask
[RESTful API] Python Flask - JWT 로그인한 유저 토큰 유효기간 만료시키는 방법(expires_delta= )
루리야ㅑ 2023. 12. 14. 07:00반응형
JWT로 회원가입해서 토큰을 생성하고 로그인할 때 토큰을 발급 받아서 Header에 넣어 실행을 해보았다.
하지만, 요즘 서비스들을 보면 보안 이슈로 로그인 후 일정 시간이 지나면 자동으로 로그아웃이 되어버린다.
로그인 후 토큰 만료 기간을 설정해보자.
1. api 클래스 내의 함수 수정
토큰 생성 후 클라이언트에게 응답 시 함수에서
파라미터 expires_delta= 를 추가하여 날짜/시/분/초를 입력하여 유효기간을 설정한다.
access_token = create_access_token(result_list[0]['id'], expires_delta= datetime.timedelta(minutes=2))
from flask import request
from flask_jwt_extended import create_access_token, get_jwt, jwt_required
from flask_restful import Resource
from mysql_connection import get_connection
from mysql.connector import Error
from email_validator import validate_email, EmailNotValidError
from utils import check_password, hash_password
class UserLoginResource(Resource) :
def post(self) :
# 1. 클라이언트로부터 데이터를 받아온다.
data = request.get_json()
# 2. 유저 테이블에, 이 이메일주소로
# 데이터를 가져온다.
try :
connection = get_connection()
query = '''select *
from user
where email = %s;'''
record = (data['email'],)
cursor = connection.cursor(dictionary=True) #sql select 할 땐 꼭 dictionary=True
cursor.execute(query,record)
result_list = cursor.fetchall()
print(result_list)
cursor.close()
connection.close()
except Error as e :
print(e)
cursor.close()
connection.close()
return {'error':str(e)}, 500
# 회원가입을 안한 경우, 리스트에 데이터가 없다.
if len(result_list) == 0 :
return{"error":"회원가입을 하세요."}, 400
# 회원은 맞으니까, 비밀번호가 맞는 지 체크한다.
#(지금 유저가 입력한 비밀번호, DB에 저장되어 있는 비밀번호)
check = check_password(data['password'], result_list[0]['password'])
# 비번이 맞지 않는 경우
if check == False :
return {'error' :'비번이 맞지 않습니다.'}, 406 # not access
# JWT 토큰을 만들어서, 클라이언트에게 응답한다.
access_token = create_access_token(result_list[0]['id'], expires_delta= datetime.timedelta(minutes=2))
# 토큰 유효기간 만요 시킬 때 datetime.timedelta(파라미터 시분초 등등 변경 가능)
return {'result':'success','access_token':access_token}, 200
2. postman으로 테스트
먼저 로그인을 하고 token을 복사하여
다른 사용자 서비스 API Headers의 Authorization 키값으로
Bearer앞에 입력한 뒤 한 칸 띄고 토큰을 입력한다.
그리고 Send 버튼을 눌러 서비스를 이용해보면 성공적으로 데이터를 가져오는 것을 볼 수 있다.
그 다음 2분 만료기간을 정해뒀으니
2분을 넘긴 뒤 Send를 하면
아래의 결과가 나오는 것을 볼 수 있다.
{
"msg" : "Token has expired"
}
expires_delta= 파라미터로 토큰 만료 기간을 설정하여 시간이 지나면 자동으로 만료 되는 모습을 확인해보았다.
반응형