deploy: update habadashi_login
Browse files
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
|
| 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 |
-
|
|
|
|
|
|
|
| 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 |
|