fastapi集成jwt

发布于:2024-06-29 ⋅ 阅读:(11) ⋅ 点赞:(0)

fastapi集成jwt

fastapi+python-jose实现jwt登录

1、安装相关包

python-jose

pip install python-jose

2、创建token及token校验

from copy import deepcopy
from datetime import timedelta, datetime

from jose import jwt, ExpiredSignatureError

SECRET_KEY ="xxx" # 生成token时使用的密钥
ALGORITHM = "" # JWT令牌签名算法


def create_token(data: dict):
    refresh_data = deepcopy(data)
    expire = datetime.utcnow() + timedelta(minutes=30)
    data.update({"exp": expire})
    token = jwt.encode(data, SECRET_KEY, algorithm=ALGORITHM)

    refresh_expire = datetime.utcnow() + timedelta(minutes=60)
    refresh_data.update({"exp": refresh_expire})
    refresh_token = jwt.encode(refresh_data, SECRET_KEY, algorithm=ALGORITHM)
    return dict(token=token, refresh_token=refresh_token)


def verify_token(token: str):
    try:
        jwt_decode = jwt.decode(token, SECRET_KEY, algorithms=ALGORITHM)
        return jwt_decode
    except ExpiredSignatureError:
        raise ExpiredSignatureError()

3、在接口中集成需要登录才能访问

from fastapi.security import OAuth2PasswordBearer

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="login") # login是登录路由地址,根据自己项目实际情况设置,在swagger UI中调用接口可能会使用到

@user_router.get("")
async def create_user(token: str = Depends(oauth2_scheme)):
    pass