我已经能够将 SQLAdmin 与 FastAPI 集成,并且还覆盖了模板。如何将模板提供给可以在用户登录时显示用户名的路由?
我不知道这是否是最好的选择。我所做的是使用 AuthenticationBackEnd 中的用户数据并使用 SessionMiddlware 更新请求会话。
from starlette.middleware.sessions import SessionMiddleware
app.add_middleware(SessionMiddleware, secret_key=SECRET_KEY, max_age=MAX_AGE)
class MohDeliveryAdmin(AuthenticationBackend):
async def login(self, request: Request) -> bool:
form = await request.form()
username, password = form["username"], form["password"]
user = session.query(User).filter(User.email == username).first()
if not user:
invalid_exception("Invalid username or password!")
# Validate username/password credentials
if not verify_password(password, user.password):
invalid_exception("Invalid Credentials!")
user_data = {
"id": user.id,
"username": user.username or None,
"email": user.email,
"phone_number": user.phone_number,
"user_type": user.user_type,
"company_name": user.company_name or None,
}
# And update session
access_token = auth.create_access_token(data=user_data)
request.session.update({"token": access_token, "user": user_data})
return True
我想补充之前的评论
with SessionLocal() as session:
user = session.query(User).filter(User.username == username).first()
所以会话来自哪里并不明显