fastApi用户认证token验证


import datetime
from fastapi import HTTPException
from  databases.query_users_model import validate_token
import jwt
from  fastapi import  Depends
from fastapi.security import OAuth2PasswordRequestForm,OAuth2PasswordBearer

SECURITY_KEY = 'cdsbfjknjkvnuidlnfuidhfusdlbdvnu'
ALGORITHMS = "HS256"
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/user/login")
def generate_access_token(username:str):
    if not username:
        raise HTTPException(
            status_code=401,
            detail="incorrect username and password",
            headers={"WWW-Authenticate": "Bearer"}
        )
    # 如果存在生成token
    token_expires = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(minutes=100)
    print("token_expires:", token_expires)
    # 需要加密的数据
    token_data = {
        'username': username,
        'exp': token_expires
    }
    token = jwt.encode(token_data, SECURITY_KEY, ALGORITHMS)

    return token



# token解析验证
async   def get_current_token(token:str = Depends(oauth2_scheme)):
    print("获取token:",token)
    uauth_exp = HTTPException(status_code=401,detail=' do you provide token none...:UnAuthorized')
    data_info = {
          "username":"",
          "exist":False
    }
    exist_user = None
    try:
         # 解码
         token_data = jwt.decode(token,SECURITY_KEY,ALGORITHMS)
         if  token_data:
               # 验证
               username = token_data.get('username', None)
               isValidate = validate_token(username)
               if  isValidate:

                   data_info['exist'] = isValidate
                   data_info['username'] = username


               else:
                   data_info['exist'] = None


    except Exception as error:
        raise uauth_exp
    if not  data_info:
         raise uauth_exp
    return data_info

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值