fix: EndUser is not bound to a Session (#25010)

This commit is contained in:
Will
2025-09-02 21:37:21 +08:00
committed by GitHub
parent b5216df4fe
commit d33dfee8a3
2 changed files with 34 additions and 31 deletions

View File

@@ -291,8 +291,9 @@ def create_or_update_end_user_for_user_id(app_model: App, user_id: Optional[str]
if not user_id: if not user_id:
user_id = "DEFAULT-USER" user_id = "DEFAULT-USER"
with Session(db.engine, expire_on_commit=False) as session:
end_user = ( end_user = (
db.session.query(EndUser) session.query(EndUser)
.where( .where(
EndUser.tenant_id == app_model.tenant_id, EndUser.tenant_id == app_model.tenant_id,
EndUser.app_id == app_model.id, EndUser.app_id == app_model.id,
@@ -310,8 +311,8 @@ def create_or_update_end_user_for_user_id(app_model: App, user_id: Optional[str]
is_anonymous=user_id == "DEFAULT-USER", is_anonymous=user_id == "DEFAULT-USER",
session_id=user_id, session_id=user_id,
) )
db.session.add(end_user) session.add(end_user)
db.session.commit() session.commit()
return end_user return end_user

View File

@@ -4,6 +4,7 @@ from functools import wraps
from flask import request from flask import request
from flask_restx import Resource from flask_restx import Resource
from sqlalchemy import select from sqlalchemy import select
from sqlalchemy.orm import Session
from werkzeug.exceptions import BadRequest, NotFound, Unauthorized from werkzeug.exceptions import BadRequest, NotFound, Unauthorized
from controllers.web.error import WebAppAuthAccessDeniedError, WebAppAuthRequiredError from controllers.web.error import WebAppAuthAccessDeniedError, WebAppAuthRequiredError
@@ -49,8 +50,9 @@ def decode_jwt_token():
decoded = PassportService().verify(tk) decoded = PassportService().verify(tk)
app_code = decoded.get("app_code") app_code = decoded.get("app_code")
app_id = decoded.get("app_id") app_id = decoded.get("app_id")
app_model = db.session.scalar(select(App).where(App.id == app_id)) with Session(db.engine, expire_on_commit=False) as session:
site = db.session.scalar(select(Site).where(Site.code == app_code)) app_model = session.scalar(select(App).where(App.id == app_id))
site = session.scalar(select(Site).where(Site.code == app_code))
if not app_model: if not app_model:
raise NotFound() raise NotFound()
if not app_code or not site: if not app_code or not site:
@@ -58,7 +60,7 @@ def decode_jwt_token():
if app_model.enable_site is False: if app_model.enable_site is False:
raise BadRequest("Site is disabled.") raise BadRequest("Site is disabled.")
end_user_id = decoded.get("end_user_id") end_user_id = decoded.get("end_user_id")
end_user = db.session.scalar(select(EndUser).where(EndUser.id == end_user_id)) end_user = session.scalar(select(EndUser).where(EndUser.id == end_user_id))
if not end_user: if not end_user:
raise NotFound() raise NotFound()