Investigate login/signup failure
Investigate and address the "Failed to fetch" error during signup and login failures.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
|
||||
import { supabase } from '@/lib/supabase';
|
||||
import { getProxyType, isCorsProxyEnabled } from '@/lib/supabase/config';
|
||||
import { getProxyType, isCorsProxyEnabled, getSupabaseUrl, getOriginalSupabaseUrl } from '@/lib/supabase/config';
|
||||
|
||||
/**
|
||||
* CORS 문제 확인
|
||||
@@ -28,8 +28,8 @@ export const verifyServerConnection = async (): Promise<{
|
||||
try {
|
||||
const start = Date.now();
|
||||
|
||||
// Supabase URL 가져오기
|
||||
const supabaseUrl = supabase.auth.url;
|
||||
// Supabase URL 가져오기 (프록시 적용 URL)
|
||||
const supabaseUrl = getSupabaseUrl();
|
||||
|
||||
if (!supabaseUrl) {
|
||||
return {
|
||||
@@ -41,7 +41,7 @@ export const verifyServerConnection = async (): Promise<{
|
||||
// 프록시 설정 상태 확인
|
||||
const usingProxy = isCorsProxyEnabled();
|
||||
const proxyType = getProxyType();
|
||||
console.log(`연결 테스트 - CORS 프록시: ${usingProxy ? '사용 중' : '미사용'}, 타입: ${proxyType}`);
|
||||
console.log(`연결 테스트 - CORS 프록시: ${usingProxy ? '사용 중' : '미사용'}, 타입: ${proxyType}, URL: ${supabaseUrl}`);
|
||||
|
||||
// 단순 헬스 체크 요청
|
||||
try {
|
||||
@@ -51,7 +51,7 @@ export const verifyServerConnection = async (): Promise<{
|
||||
'Content-Type': 'application/json',
|
||||
'apikey': localStorage.getItem('supabase_key') || ''
|
||||
},
|
||||
signal: AbortSignal.timeout(5000) // 타임아웃 시간 증가
|
||||
signal: AbortSignal.timeout(8000) // 타임아웃 시간 증가
|
||||
});
|
||||
|
||||
const elapsed = Date.now() - start;
|
||||
@@ -73,6 +73,15 @@ export const verifyServerConnection = async (): Promise<{
|
||||
} catch (fetchError: any) {
|
||||
console.error('기본 연결 확인 실패, 상태 확인 시도:', fetchError);
|
||||
|
||||
// HTTP URL을 사용하는데 프록시가 비활성화된 경우
|
||||
const originalUrl = getOriginalSupabaseUrl();
|
||||
if (originalUrl.startsWith('http:') && !usingProxy) {
|
||||
return {
|
||||
connected: false,
|
||||
message: 'HTTP URL에 직접 접근할 수 없습니다. CORS 프록시를 활성화하세요.'
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
// 대체 경로로 상태 확인
|
||||
const altResponse = await fetch(`${supabaseUrl}/`, {
|
||||
@@ -80,7 +89,7 @@ export const verifyServerConnection = async (): Promise<{
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
signal: AbortSignal.timeout(5000)
|
||||
signal: AbortSignal.timeout(8000)
|
||||
});
|
||||
|
||||
// 어떤 응답이라도 오면 서버가 살아있다고 간주
|
||||
@@ -121,12 +130,20 @@ export const verifyServerConnection = async (): Promise<{
|
||||
}
|
||||
}
|
||||
|
||||
// HTTP URL을 사용하는데 프록시가 비활성화된 경우
|
||||
const originalUrl = getOriginalSupabaseUrl();
|
||||
if (originalUrl.startsWith('http:') && !usingProxy) {
|
||||
errorMessage = 'HTTP URL에 직접 접근할 수 없습니다. CORS 프록시를 활성화하세요.';
|
||||
}
|
||||
|
||||
// Cloudflare 프록시 추천 메시지 추가
|
||||
if (errorMessage.includes('CORS') || errorMessage.includes('fetch') || errorMessage.includes('네트워크')) {
|
||||
if (!usingProxy) {
|
||||
console.log('CORS 오류 감지, Cloudflare 프록시 사용 권장');
|
||||
errorMessage += '. Cloudflare CORS 프록시 사용을 권장합니다.';
|
||||
} else if (proxyType !== 'cloudflare') {
|
||||
console.log('CORS 오류 감지, Cloudflare 프록시로 변경 권장');
|
||||
errorMessage += '. Cloudflare CORS 프록시로 변경을 권장합니다.';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -146,7 +163,7 @@ export const verifySupabaseConnection = async (): Promise<{
|
||||
statusCode?: number;
|
||||
details?: string;
|
||||
}> => {
|
||||
const supabaseUrl = localStorage.getItem('supabase_url');
|
||||
const supabaseUrl = getSupabaseUrl();
|
||||
if (!supabaseUrl) {
|
||||
return {
|
||||
connected: false,
|
||||
@@ -154,6 +171,11 @@ export const verifySupabaseConnection = async (): Promise<{
|
||||
};
|
||||
}
|
||||
|
||||
// 프록시 정보 로깅
|
||||
const usingProxy = isCorsProxyEnabled();
|
||||
const proxyType = getProxyType();
|
||||
console.log(`강화된 연결 테스트 - 프록시: ${usingProxy ? '사용 중' : '미사용'}, 타입: ${proxyType}, URL: ${supabaseUrl}`);
|
||||
|
||||
// 무작위 쿼리 파라미터를 추가하여 캐시 방지
|
||||
const cacheParam = `?_nocache=${Date.now()}`;
|
||||
|
||||
@@ -167,14 +189,18 @@ export const verifySupabaseConnection = async (): Promise<{
|
||||
|
||||
for (const path of paths) {
|
||||
try {
|
||||
console.log(`경로 시도: ${path}`);
|
||||
const response = await fetch(`${supabaseUrl}${path}${cacheParam}`, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
'Content-Type': 'application/json',
|
||||
'apikey': localStorage.getItem('supabase_key') || ''
|
||||
},
|
||||
signal: AbortSignal.timeout(5000)
|
||||
signal: AbortSignal.timeout(8000)
|
||||
});
|
||||
|
||||
console.log(`경로 ${path} 응답 상태:`, response.status);
|
||||
|
||||
// 어떤 응답이든 서버가 살아있다는 신호로 간주
|
||||
return {
|
||||
connected: true,
|
||||
@@ -188,6 +214,16 @@ export const verifySupabaseConnection = async (): Promise<{
|
||||
}
|
||||
}
|
||||
|
||||
// HTTP URL을 사용하는데 프록시가 비활성화된 경우
|
||||
const originalUrl = getOriginalSupabaseUrl();
|
||||
if (originalUrl.startsWith('http:') && !usingProxy) {
|
||||
return {
|
||||
connected: false,
|
||||
message: 'HTTP URL에 직접 접근할 수 없습니다. CORS 프록시를 활성화하세요.',
|
||||
details: 'CORS 제한으로 인해 HTTP URL에 직접 접근할 수 없습니다'
|
||||
};
|
||||
}
|
||||
|
||||
// 모든 경로 시도 실패
|
||||
return {
|
||||
connected: false,
|
||||
|
||||
Reference in New Issue
Block a user