Investigate login/register 404 errors

Investigate and address persistent 404 errors occurring during login and registration processes.
This commit is contained in:
gpt-engineer-app[bot]
2025-03-15 15:01:48 +00:00
parent a32eb26105
commit e52ca26cef
7 changed files with 223 additions and 75 deletions

View File

@@ -1,5 +1,5 @@
import { toast } from "@/hooks/useToast.wrapper";
import { toast } from "@/components/ui/use-toast";
/**
* 로그인 오류 메시지를 처리하는 유틸리티 함수
@@ -19,6 +19,8 @@ export const getLoginErrorMessage = (error: any): string => {
errorMessage = "CORS 오류: 프록시 설정을 확인하거나 다른 프록시를 시도해보세요.";
} else if (error.message.includes("fetch") || error.message.includes("네트워크")) {
errorMessage = "네트워크 오류: 서버 연결에 실패했습니다.";
} else if (error.message.includes("404") || error.message.includes("Not Found")) {
errorMessage = "서버 오류: API 경로를 찾을 수 없습니다. 서버 설정을 확인하세요.";
} else {
errorMessage = `오류: ${error.message}`;
}
@@ -30,10 +32,10 @@ export const getLoginErrorMessage = (error: any): string => {
/**
* 로그인 성공 시 사용자에게 알림을 표시합니다.
*/
export const showLoginSuccessToast = () => {
export const showLoginSuccessToast = (mode?: string) => {
toast({
title: "로그인 성공",
description: "환영합니다! 대시보드로 이동합니다.",
description: mode ? `${mode}로 로그인되었습니다.` : "환영합니다! 대시보드로 이동합니다.",
variant: "default"
});
};
@@ -59,6 +61,8 @@ export const isCorsOrJsonError = (errorMessage: string | null): boolean => {
errorMessage.includes('JSON') ||
errorMessage.includes('CORS') ||
errorMessage.includes('프록시') ||
errorMessage.includes('서버 응답')
errorMessage.includes('서버 응답') ||
errorMessage.includes('404') ||
errorMessage.includes('Not Found')
);
};

View File

@@ -60,30 +60,57 @@ export const verifyServerConnection = async (): Promise<{
const supabaseUrl = supabase.auth.url;
// 단순 헬스 체크 요청
const response = await fetch(`${supabaseUrl}/`, {
method: 'GET',
headers: {
'Content-Type': 'application/json'
},
// 연결 확인만을 위한 요청이므로 짧은 타임아웃 설정
signal: AbortSignal.timeout(3000)
});
try {
const response = await fetch(`${supabaseUrl}/`, {
method: 'GET',
headers: {
'Content-Type': 'application/json'
},
// 연결 확인만을 위한 요청이므로 짧은 타임아웃 설정
signal: AbortSignal.timeout(3000)
});
const elapsed = Date.now() - start;
// 200, 401, 404 응답도 서버가 살아있다는 신호로 간주
if (response.ok || response.status === 401 || response.status === 404) {
return {
connected: true,
message: `서버 연결 성공 (응답 시간: ${elapsed}ms)`,
statusCode: response.status
};
} else {
return {
connected: false,
message: `서버 응답 오류: ${response.status} ${response.statusText}`,
statusCode: response.status
};
}
} catch (fetchError: any) {
console.error('기본 연결 확인 실패, 대체 경로 시도:', fetchError);
const elapsed = Date.now() - start;
if (response.ok || response.status === 401) {
// 401도 서버가 응답했다는 의미이므로 연결 성공으로 간주
return {
connected: true,
message: `서버 연결 성공 (응답 시간: ${elapsed}ms)`,
statusCode: response.status
};
} else {
return {
connected: false,
message: `서버 응답 오류: ${response.status} ${response.statusText}`,
statusCode: response.status
};
// 대체 경로로 재시도
try {
const altResponse = await fetch(`${supabaseUrl}/auth/v1/`, {
method: 'GET',
headers: {
'Content-Type': 'application/json'
},
signal: AbortSignal.timeout(3000)
});
// 어떤 응답이라도 오면 서버가 살아있다고 간주
const elapsed = Date.now() - start;
return {
connected: true,
message: `서버 연결 성공 (대체 경로, 응답 시간: ${elapsed}ms)`,
statusCode: altResponse.status
};
} catch (altError) {
// 두 가지 경로 모두 실패
console.error('대체 경로 확인도 실패:', altError);
throw fetchError; // 원래 에러를 던짐
}
}
} catch (error: any) {
console.error('서버 연결 확인 중 오류:', error);