From 2795b93d434ecf8f3b4a6a184ef0802a2c62b92b Mon Sep 17 00:00:00 2001 From: king Date: Sun, 24 May 2026 17:53:48 +0900 Subject: [PATCH] =?UTF-8?q?fix(sso):=20=EB=AF=B8=EB=93=A4=EC=9B=A8?= =?UTF-8?q?=EC=96=B4=20=EB=93=B1=EB=A1=9D=20=EC=88=9C=EC=84=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=E2=80=94=20AuthGuard=20=EA=B0=80=20session=20?= =?UTF-8?q?=EC=9D=84=20=EC=9D=BD=EC=9D=84=20=EC=88=98=20=EC=9E=88=EB=8F=84?= =?UTF-8?q?=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Starlette 의 add_middleware 는 마지막에 추가한 것이 가장 바깥(먼저 실행). AuthGuardMiddleware 가 request.session 을 보려면 SessionMiddleware 가 먼저 scope 에 session 을 주입해야 한다. 따라서: app.add_middleware(AuthGuardMiddleware) # 안쪽 app.add_middleware(SessionMiddleware, ...) # 바깥쪽 (먼저 실행) --- main.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/main.py b/main.py index 0f52ef2..73afc73 100644 --- a/main.py +++ b/main.py @@ -138,8 +138,12 @@ except ImportError: app = FastAPI(title="CS Web Program") -# 세션 미들웨어 — dbx-main 과 동일한 SESSION_SECRET_KEY / SESSION_COOKIE_NAME 사용 시 -# 같은 도메인의 세션 쿠키를 그대로 읽을 수 있다 (SSO). +# 미들웨어 등록 순서 주의: +# Starlette 은 add_middleware 를 "반대 순서로" 적용한다 (마지막에 추가한 것이 가장 바깥). +# AuthGuardMiddleware 가 request.session 을 읽으려면 SessionMiddleware 가 +# 먼저 실행돼서 scope 에 session 을 주입해야 한다. +# 따라서 AuthGuard 를 먼저 추가 (내부) → Session 을 나중에 추가 (외부, 먼저 실행). +app.add_middleware(AuthGuardMiddleware) app.add_middleware( SessionMiddleware, secret_key=_require_session_secret(), @@ -149,8 +153,6 @@ app.add_middleware( max_age=int(os.getenv("SESSION_MAX_AGE", "28800")), path="/", ) -# 인증 가드 — 정적/헬스/콜백/로그인·로그아웃 외 모든 경로에 적용 -app.add_middleware(AuthGuardMiddleware) @app.get("/health/db")