如何覆盖 SQLAdmin(FastAPI 和 Stallete 的 SQLAlchemy Admin)以在成功登录管理仪表板时显示用户名

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

我已经能够将 SQLAdmin 与 FastAPI 集成,并且还覆盖了模板。如何将模板提供给可以在用户登录时显示用户名的路由?

sql sqlalchemy admin fastapi
2个回答
0
投票

我不知道这是否是最好的选择。我所做的是使用 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

0
投票

我想补充之前的评论

        with SessionLocal() as session:
            user = session.query(User).filter(User.username == username).first()

所以会话来自哪里并不明显

© www.soinside.com 2019 - 2024. All rights reserved.