You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

92 lines
2.2 KiB

# -*- coding: utf-8 -*-
"""
utils.jwt
~~~~~~~~~~~~~~
jwt的相关操作.
:copyright: 云南新八达科技有限公司.
:author: 李进才.
"""
import jwt
from datetime import datetime, timedelta
import configparser
# 创建一个类
config = configparser.ConfigParser()
configFilePath = r'./config.ini'
config.read(configFilePath)
def generate_jwt_short(payload, secret=None):
"""
:param payload: dict 载荷
:param secret: 密钥
:return: 生成jwt
"""
now = datetime.utcnow()
expiry = now + timedelta(hours=int(config.get("jwt", "EXPIRY_HOURS"))) # 短期token
_payload = {'exp': expiry}
_payload.update(payload)
if not secret:
secret = config.get("jwt", "SECRET") # 需要在配置文件配置JWT_SECRET
token = jwt.encode(_payload, secret, algorithm='HS256')
return token.decode()
def generate_jwt_long(payload, secret=None):
"""
:param payload: dict 载荷
:param secret: 密钥
:return: 生成jwt
"""
now = datetime.utcnow()
expiry = now + timedelta(days=int(config.get("jwt", "REFRESH_DAYS"))) # 长期token
_payload = {'exp': expiry}
_payload.update(payload)
if not secret:
secret = config.get("jwt", "SECRET") # 需要在配置文件配置JWT_SECRET
token = jwt.encode(_payload, secret, algorithm='HS256')
return token.decode()
def verify_jwt(token, secret=None):
"""
校验jwt
:param token: jwt
:param secret: 密钥
:return: dict: payload
"""
if not secret:
secret = config.get("jwt", "SECRET")
try:
payload = jwt.decode(token, secret, algorithm=('HS256'))
except jwt.PyJWTError:
payload = None
return payload
def verify_jwt_username(token, secret=None):
"""
校验jwt
:param token: jwt
:param secret: 密钥
:return: dict: payload
"""
if not secret:
secret = config.get("jwt", "SECRET")
try:
payload = jwt.decode(token, secret, algorithm=('HS256'))
except jwt.PyJWTError:
payload = None
return payload['UserName']