flask-libroro/old.utils/jwt_utils.py
2025-02-20 17:50:47 +08:00

52 lines
1.8 KiB
Python

import jwt
from datetime import datetime, timedelta
from flask import request
from mock_data import MOCK_USERS, UserInfo
# TODO: Replace with your own secret key
ACCESS_TOKEN_SECRET = 'access_token_secret'
REFRESH_TOKEN_SECRET = 'refresh_token_secret'
def generate_access_token(user: UserInfo):
payload = {
'user': user,
'iat': datetime.utcnow(),
'exp': datetime.utcnow() + timedelta(days=7)
}
return jwt.encode(payload, ACCESS_TOKEN_SECRET, algorithm='HS256')
def generate_refresh_token(user: UserInfo):
payload = {
'user': user,
'iat': datetime.utcnow(),
'exp': datetime.utcnow() + timedelta(days=30)
}
return jwt.encode(payload, REFRESH_TOKEN_SECRET, algorithm='HS256')
def verify_access_token():
auth_header = request.headers.get('Authorization')
if not auth_header or not auth_header.startswith('Bearer '):
return None
token = auth_header.split(' ')[1]
try:
decoded = jwt.decode(token, ACCESS_TOKEN_SECRET, algorithms=['HS256'])
username = decoded['user']['username']
user = next((u for u in MOCK_USERS if u['username'] == username), None)
if user:
user_info = {k: v for k, v in user.items() if k != 'password'}
return user_info
return None
except jwt.PyJWTError:
return None
def verify_refresh_token(token):
try:
decoded = jwt.decode(token, REFRESH_TOKEN_SECRET, algorithms=['HS256'])
username = decoded['user']['username']
user = next((u for u in MOCK_USERS if u['username'] == username), None)
if user:
user_info = {k: v for k, v in user.items() if k != 'password'}
return user_info
return None
except jwt.PyJWTError:
return None