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