fix: 미들웨어 Supabase hang으로 인한 모바일 접속 불가 해결
- /api/ 경로 전체를 미들웨어 매처에서 제외 (각 API 라우트가 자체 인증 처리) - updateSession() 실패 시 try-catch로 페이지 접근 허용 (연결 hang 방지) - supabase.auth.getUser() 오류 시 세션 갱신 생략하고 통과 원인: 모든 요청에 실행되는 Edge Runtime 미들웨어에서 Supabase 외부 API 호출이 일시 지연/실패 시 Vercel이 연결을 강제 종료, Safari에서 "네트워크 서버를 찾을 수 없음"으로 표시됨 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -44,11 +44,21 @@ export async function middleware(request: NextRequest) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// API 라우트는 세션 갱신 불필요 — 각 API에서 독립적으로 인증 처리
|
||||||
|
if (pathname.startsWith('/api/')) {
|
||||||
|
return NextResponse.next();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Supabase 세션 갱신 — 실패해도 페이지 접근은 허용
|
||||||
|
try {
|
||||||
return await updateSession(request);
|
return await updateSession(request);
|
||||||
|
} catch {
|
||||||
|
return NextResponse.next({ request });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const config = {
|
export const config = {
|
||||||
matcher: [
|
matcher: [
|
||||||
'/((?!_next/static|_next/image|favicon.ico|api/telegram/webhook|.*\\.(?:svg|png|jpg|jpeg|gif|webp)$).*)',
|
'/((?!_next/static|_next/image|favicon.ico|api/|.*\\.(?:svg|png|jpg|jpeg|gif|webp)$).*)',
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -28,8 +28,12 @@ export async function updateSession(request: NextRequest) {
|
|||||||
{ cookies: cookieMethods }
|
{ cookies: cookieMethods }
|
||||||
);
|
);
|
||||||
|
|
||||||
// 세션 갱신 (IMPORTANT: getUser()는 반드시 호출해야 함)
|
// 세션 갱신 — 실패해도 응답 반환 (외부 네트워크 오류로 hang 방지)
|
||||||
|
try {
|
||||||
await supabase.auth.getUser();
|
await supabase.auth.getUser();
|
||||||
|
} catch {
|
||||||
|
// Supabase 일시 오류 시 세션 갱신 생략하고 통과
|
||||||
|
}
|
||||||
|
|
||||||
return supabaseResponse;
|
return supabaseResponse;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user