fix(sso): 미들웨어 등록 순서 수정 — AuthGuard 가 session 을 읽을 수 있도록

Starlette 의 add_middleware 는 마지막에 추가한 것이 가장 바깥(먼저 실행).
AuthGuardMiddleware 가 request.session 을 보려면 SessionMiddleware 가
먼저 scope 에 session 을 주입해야 한다. 따라서:
  app.add_middleware(AuthGuardMiddleware)    # 안쪽
  app.add_middleware(SessionMiddleware, ...) # 바깥쪽 (먼저 실행)
This commit is contained in:
2026-05-24 17:53:48 +09:00
parent e8de7de170
commit 2795b93d43
+6 -4
View File
@@ -138,8 +138,12 @@ except ImportError:
app = FastAPI(title="CS Web Program") 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( app.add_middleware(
SessionMiddleware, SessionMiddleware,
secret_key=_require_session_secret(), secret_key=_require_session_secret(),
@@ -149,8 +153,6 @@ app.add_middleware(
max_age=int(os.getenv("SESSION_MAX_AGE", "28800")), max_age=int(os.getenv("SESSION_MAX_AGE", "28800")),
path="/", path="/",
) )
# 인증 가드 — 정적/헬스/콜백/로그인·로그아웃 외 모든 경로에 적용
app.add_middleware(AuthGuardMiddleware)
@app.get("/health/db") @app.get("/health/db")