# -*- 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']