|
1 | 1 | from fastapi import APIRouter
|
2 | 2 | from fastapi import FastAPI
|
| 3 | +from sqlalchemy.orm import Session |
3 | 4 |
|
4 | 5 | from config import oauth2_config
|
5 | 6 | from database import Base
|
6 | 7 | from database import engine
|
| 8 | +from database import get_db |
7 | 9 | from fastapi_oauth2.middleware import OAuth2Middleware
|
| 10 | +from fastapi_oauth2.middleware import User |
8 | 11 | from fastapi_oauth2.router import router as oauth2_router
|
| 12 | +from models import User as UserModel |
9 | 13 | from router import router as app_router
|
10 | 14 |
|
11 | 15 | Base.metadata.create_all(bind=engine)
|
12 | 16 |
|
13 | 17 | router = APIRouter()
|
14 | 18 |
|
| 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 | + |
15 | 35 | app = FastAPI()
|
16 | 36 | app.include_router(app_router)
|
17 | 37 | 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