我分别创建了“用户”和“商店”路线。 因此,有一个可以访问“用户”帐户的 api,也有一个可以访问“商店”帐户的 api。
# user_route.py...
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/api/user/login")
router = APIRouter(
prefix="/api/user",
)
# shop_route.py...
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/api/shop/login")
router = APIRouter(
prefix="/api/shop",
)
但是swagger ui中只能登录一种类型的账号。 所以我考虑分别为“用户”和“商店”路由器制作 swagger ui,但只有“app1”有效
# main.py...
app1 = FastAPI(
title="user Auth",
docs_url="/docs-user"
)
app2 = FastAPI(
title="user Auth",
docs_url="/docs-shop"
)
...
app1.include_router(user_router.router)
app2.include_router(shop_router.router)
有没有办法在 Swagger ui 中同时使用两种类型的帐户?
如果我猜对了,你会尝试实现这种行为:
您可以使用此代码来实现此目的:
from typing import Annotated
from fastapi import APIRouter, Depends, FastAPI
from fastapi.security import OAuth2PasswordBearer
application = FastAPI(
title="TEST APP"
)
class ShopOAuth2PasswordBearer(OAuth2PasswordBearer):
pass
class UserOAuth2PasswordBearer(OAuth2PasswordBearer):
pass
# user_route.py...
oauth2_scheme_user = ShopOAuth2PasswordBearer(tokenUrl="/api/user/login")
router_user = APIRouter(
prefix="/api/user",
)
# shop_route.py...
oauth2_scheme_shop = UserOAuth2PasswordBearer(tokenUrl="/api/shop/login")
router_shop = APIRouter(
prefix="/api/shop",
)
@router_user.post("/login")
async def login_user(token: Annotated[str, Depends(oauth2_scheme_user)]):
return {"token": "user_token"}
@router_shop.post("/login")
async def login_shop(token: Annotated[str, Depends(oauth2_scheme_shop)]):
return {"token": "shop_token"}
application.include_router(router_user)
application.include_router(router_shop)