Files
jaengseung-made/utils/supabase/middleware.ts
gahusb 64393e9740 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>
2026-03-21 23:29:26 +09:00

40 lines
1.3 KiB
TypeScript

import { NextResponse, type NextRequest } from 'next/server';
import { createServerClient, type CookieMethodsServer } from '@supabase/ssr';
export async function updateSession(request: NextRequest) {
// Supabase 환경변수가 없으면 그냥 통과
if (!process.env.NEXT_PUBLIC_SUPABASE_URL || !process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY) {
return NextResponse.next({ request });
}
let supabaseResponse = NextResponse.next({ request });
const cookieMethods: CookieMethodsServer = {
getAll() {
return request.cookies.getAll();
},
setAll(cookiesToSet) {
cookiesToSet.forEach(({ name, value }) => request.cookies.set(name, value));
supabaseResponse = NextResponse.next({ request });
cookiesToSet.forEach(({ name, value, options }) =>
supabaseResponse.cookies.set(name, value, options)
);
},
};
const supabase = createServerClient(
process.env.NEXT_PUBLIC_SUPABASE_URL,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY,
{ cookies: cookieMethods }
);
// 세션 갱신 — 실패해도 응답 반환 (외부 네트워크 오류로 hang 방지)
try {
await supabase.auth.getUser();
} catch {
// Supabase 일시 오류 시 세션 갱신 생략하고 통과
}
return supabaseResponse;
}