인증 토큰을 만들어 봤으니
로그인할때 user_id 에 대한 인증토큰을 받아오고,
(내가 적은 글을 마음대로 삭제할 수 없도록 로그인의 토큰을 이용하여 보호를 할 수 있다.)
로그아웃을 할때도 인증 토큰을 활용해봤다.
(다른 접속자가 내 아이디를 마음대로 로그아웃을 하는 것도 문제이기 때문)
2021.04.08 - [coding/API] - JWT 인증토큰 활용
JWT 인증토큰 활용
회원정보를 가져오는 API를 만들었다. GET을 사용하여 가져왔으나, 문제는 개인정보를 아무나 볼 수 있다는 것이 문제였다. class UserResource(Resource): # login API def post(self): # 회원정보 API def get(s..
golduny.tistory.com
레퍼런스의 자료를 보고 참고하여 작성할 수 있다.
레퍼런스 : flask-jwt-extended.readthedocs.io/en/stable/blocklist_and_token_revoking/
1. resource.py
login 함수를 만들어 주기 전에 전역변수로 blocklist를 set으로 할당한다.
jwt_blocklist = set()
2. app.py
위에서 설정한 blocklist를 import 한다.
from resources.user import jwt_blocklist
로그인/로그아웃 관리를 위한 jwt설정 함수
## 로그인/로그아웃 관리를 위한 jwt설정
@jwt.token_in_blocklist_loader
def check_if_token_is_revoked(jwt_header, jwt_payload):
jti = jwt_payload['jti']
return jti in jwt_blocklist
그리고 login 함수가 들어있는 resource.py와 연결 시켜 준다.
api.add_resource(UserResource,'/user/login')
3. resource.py 로그인 기능 구현
class UserResource(Resource):
# login API
def post(self):
data = request.get_json()
print(data)
if "email" not in data or "password" not in data:
return {'error_code': "input your password or email"}, HTTPStatus.BAD_REQUEST
connection = get_mysql_connection()
cursor = connection.cursor(dictionary =True)
try:
# Validate.
valid = validate_email(data['email'])
except EmailNotValidError as e:
# email is not valid, exception message is human-readable
print(str(e))
return {'error_code':'not valid email'},HTTPStatus.BAD_REQUEST
query = '''select id, password
from user
where email = %s;'''
param = (data['email'],)
cursor.execute(query, param)
records = cursor.fetchall()
if records == []:
return {'error_code':'not exist email'}
cursor.close()
connection.close()
# JWT를 이용해서 인증토큰을 생성해 준다.
password = check_passwd(data['password'],records[0]['password'])
if password is True:
user_id = records[0]['id']
access_token = create_access_token(identity=user_id)
return {'message': 'access login', 'token': access_token},HTTPStatus.OK
else:
return {'message': 'wrong password'},HTTPStatus.BAD_REQUEST
4. resource.py 로그아웃 기능 구현
from flask_jwt_extended importget_jwt
#로그아웃 API
class UserLogoutResource(Resource):
@jwt_required()
def post(self):
# 로그아웃을 위한 레퍼런스를 따라하는 것
jti = get_jwt()['jti']
jwt_blocklist.add(jti)
return {'message':'logout'},HTTPStatus.OK
[API] Twilio 문자/전화 서비스 (0) | 2021.05.27 |
---|---|
API 파일 역할 (0) | 2021.04.15 |
API 서버 배포 (serverlessframework) (0) | 2021.04.14 |
JWT 인증토큰 활용 (1) | 2021.04.08 |
Restful API란? (0) | 2021.04.06 |