61 lines
1.7 KiB
Python
61 lines
1.7 KiB
Python
|
|
#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)
|
|||
|
|
|