Skip to content

Commit 2b2f0a5

Browse files
committed
Showcase the usage of callback of the middleware
Performing user onboarding - The callback sample checks for user's existence and creates if there is no such user with the given identity.
1 parent d38d513 commit 2b2f0a5

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

examples/demonstration/main.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,38 @@
11
from fastapi import APIRouter
22
from fastapi import FastAPI
3+
from sqlalchemy.orm import Session
34

45
from config import oauth2_config
56
from database import Base
67
from database import engine
8+
from database import get_db
79
from fastapi_oauth2.middleware import OAuth2Middleware
10+
from fastapi_oauth2.middleware import User
811
from fastapi_oauth2.router import router as oauth2_router
12+
from models import User as UserModel
913
from router import router as app_router
1014

1115
Base.metadata.create_all(bind=engine)
1216

1317
router = APIRouter()
1418

19+
20+
async def on_auth(user: User):
21+
# perform a check for user existence in
22+
# the database and create if not exists
23+
db: Session = next(get_db())
24+
query = db.query(UserModel)
25+
if not query.filter_by(identity=user.identity).first():
26+
UserModel(**{
27+
"identity": user.get("identity"),
28+
"username": user.get("username"),
29+
"image": user.get("image"),
30+
"email": user.get("email"),
31+
"name": user.get("name"),
32+
}).save(db)
33+
34+
1535
app = FastAPI()
1636
app.include_router(app_router)
1737
app.include_router(oauth2_router)
18-
app.add_middleware(OAuth2Middleware, config=oauth2_config)
38+
app.add_middleware(OAuth2Middleware, config=oauth2_config, callback=on_auth)

0 commit comments

Comments
 (0)