diff --git a/main.py b/main.py index c9a8c38..1fb269f 100644 --- a/main.py +++ b/main.py @@ -71,9 +71,16 @@ class AuthGuardMiddleware(BaseHTTPMiddleware): """ async def dispatch(self, request: Request, call_next): - # ASGI scope 의 raw path 는 root_path 가 제외된 형태. - # (request.url.path 는 root_path 가 prepend 된 형태라 prefix 매칭이 어긋남) - path = request.scope.get("path", "") + # 환경별로 scope.path 가 root_path 를 포함할 수도, 안 할 수도 있어 + # 항상 root_path 제외된 형태로 정규화한다. + raw = request.scope.get("path", "") or "/" + if APP_ROOT_PATH and raw.startswith(APP_ROOT_PATH + "/"): + path = raw[len(APP_ROOT_PATH):] + elif APP_ROOT_PATH and raw == APP_ROOT_PATH: + path = "/" + else: + path = raw + for prefix in _AUTH_EXEMPT_PREFIXES: if path == prefix or path.startswith(prefix): return await call_next(request)