Renecto commited on
Commit
a6b8602
·
verified ·
1 Parent(s): 40c9a85

deploy: update habadashi_login

Browse files
Files changed (1) hide show
  1. app.py +14 -3
app.py CHANGED
@@ -91,6 +91,9 @@ print("[PHASE] fastapi_init_start")
91
  app = FastAPI()
92
  print("[PHASE] fastapi_init_end")
93
 
 
 
 
94
  # --- Request Logging Middleware ---
95
  class RequestLoggingMiddleware(BaseHTTPMiddleware):
96
  async def dispatch(self, request: Request, call_next):
@@ -133,13 +136,19 @@ class RequestLoggingMiddleware(BaseHTTPMiddleware):
133
 
134
  @staticmethod
135
  def _resolve_user(request: Request):
136
- """User resolution from cookie with org_name from profiles table."""
137
  token = request.cookies.get("sb_access_token")
138
  if not token:
139
  return None
140
  try:
141
  res = supabase.auth.get_user(token)
142
  user_id = str(res.user.id)
 
 
 
 
 
 
143
  email = res.user.email
144
  org_name = None
145
  try:
@@ -149,8 +158,10 @@ class RequestLoggingMiddleware(BaseHTTPMiddleware):
149
  org_name = (profile_res.data.get("organizations") or {}).get("name")
150
  except Exception as pe:
151
  print(f"[ORG_CONTEXT] _resolve_user: profile fetch failed: {pe}")
152
- print(f"[ORG_CONTEXT] _resolve_user: user_id={user_id} email={email} org_name={org_name!r}")
153
- return {"user_id": user_id, "email": email, "org_name": org_name}
 
 
154
  except Exception:
155
  return None
156
 
 
91
  app = FastAPI()
92
  print("[PHASE] fastapi_init_end")
93
 
94
+ # user_id -> profile dict のキャッシュ(プロセス内で保持、ログイン情報は変わらない前提)
95
+ _user_profile_cache: dict = {}
96
+
97
  # --- Request Logging Middleware ---
98
  class RequestLoggingMiddleware(BaseHTTPMiddleware):
99
  async def dispatch(self, request: Request, call_next):
 
136
 
137
  @staticmethod
138
  def _resolve_user(request: Request):
139
+ """User resolution from cookie. org_name is fetched once and cached per user_id."""
140
  token = request.cookies.get("sb_access_token")
141
  if not token:
142
  return None
143
  try:
144
  res = supabase.auth.get_user(token)
145
  user_id = str(res.user.id)
146
+
147
+ # キャッシュヒットならプロフィール取得をスキップ
148
+ if user_id in _user_profile_cache:
149
+ return _user_profile_cache[user_id]
150
+
151
+ # 初回のみ profiles から org_name を取得
152
  email = res.user.email
153
  org_name = None
154
  try:
 
158
  org_name = (profile_res.data.get("organizations") or {}).get("name")
159
  except Exception as pe:
160
  print(f"[ORG_CONTEXT] _resolve_user: profile fetch failed: {pe}")
161
+ print(f"[ORG_CONTEXT] _resolve_user: first fetch user_id={user_id} email={email} org_name={org_name!r}")
162
+ user_info = {"user_id": user_id, "email": email, "org_name": org_name}
163
+ _user_profile_cache[user_id] = user_info
164
+ return user_info
165
  except Exception:
166
  return None
167