FastAPI swagger ui 中的多帐户授权

问题描述 投票:0回答:1

我分别创建了“用户”和“商店”路线。 因此,有一个可以访问“用户”帐户的 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 中同时使用两种类型的帐户?

oauth-2.0 jwt swagger fastapi
1个回答
0
投票

如果我猜对了,你会尝试实现这种行为:

您可以使用此代码来实现此目的:

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)
© www.soinside.com 2019 - 2024. All rights reserved.