#coding=utf-8 from ast import If from typing import Any import jwt from jwt.exceptions import InvalidTokenError from passlib.context import CryptContext from datetime import datetime, timedelta,timezone from src.utils.config import read_config # 密钥,用于签名和验证JWT SECRET_KEY = 'fastapi_longyu12' # 令牌过期时间 默认十天 EXP = datetime.now(timezone.utc)+timedelta(days=1) project = read_config("project") if project.get("tokenTIme"): EXP = datetime.now(timezone.utc)+ timedelta(days=project.get("tokenTIme")) """ 生成 token 令牌 @payload: Any 存在token里面的信息 """ def createToken(payload: Any): payload["exp"] = EXP token = jwt.encode(payload, SECRET_KEY, algorithm='HS256' ) return token def vertify_is_login(token: str): try: payload = jwt.decode(token, SECRET_KEY, algorithms=["HS256"], verify=False) print(int(payload.get("exp")) , int((datetime.now(timezone.utc)).timestamp())) if int(payload.get("exp")) < int((datetime.now(timezone.utc)).timestamp()): print("登录已过期") return False else: return True except jwt.exceptions.ExpiredSignatureError: print("登录已过期") return False except (jwt.exceptions.InvalidSignatureError, jwt.exceptions.DecodeError): print("无效凭证") return False # def getTokenInfo(): # 载荷,即JWT中包含的信息 # payload = { # 'user_id': 123, # 'username': 'john_doe', # 'exp': datetime.datetime.utcnow() + datetime.timedelta(days=1) # } # # 生成JWT # token = jwt.encode(payload, secret_key, algorithm='HS256') # print('Generated JWT:', token)