Update error message

Update the error message displayed during sign-up.
This commit is contained in:
gpt-engineer-app[bot]
2025-03-15 15:52:33 +00:00
parent 348194ccec
commit 55958e9362
5 changed files with 213 additions and 40 deletions

View File

@@ -43,7 +43,8 @@ export const signUpWithDirectApi = async (email: string, password: string, usern
email,
password,
data: { username } // 사용자 메타데이터에 username 추가
})
}),
signal: AbortSignal.timeout(15000) // 타임아웃 시간 증가
});
console.log('회원가입 응답 상태:', response.status);
@@ -64,9 +65,20 @@ export const signUpWithDirectApi = async (email: string, password: string, usern
let responseData;
try {
// 응답이 비어있지 않은 경우에만 JSON 파싱 시도
responseData = responseText ? JSON.parse(responseText) : {};
responseData = responseText && responseText.trim() !== '' ? JSON.parse(responseText) : {};
} catch (e) {
console.warn('JSON 파싱 실패:', e, '원본 응답:', responseText);
// 401 응답은 인증 실패로 처리
if (response.status === 401) {
return {
error: {
message: '회원가입 권한이 없습니다. Supabase 설정 또는 권한을 확인하세요.'
},
user: null
};
}
if (response.status >= 200 && response.status < 300) {
// 성공 응답이지만 JSON이 아닌 경우 (빈 응답 등)
responseData = { success: true };
@@ -87,6 +99,7 @@ export const signUpWithDirectApi = async (email: string, password: string, usern
return { error: { message: errorMessage }, user: null };
}
// 응답 상태 코드가 성공(2xx)이면서 사용자 데이터가 있는 경우
if (response.ok && responseData && responseData.id) {
const user = {
id: responseData.id,
@@ -119,17 +132,35 @@ export const signUpWithDirectApi = async (email: string, password: string, usern
return { error: null, user };
}
} else if (response.ok) {
// 응답이 성공이지만 사용자 정보가 없는 경우
showAuthToast('회원가입 성공', '계정이 생성되었습니다. 로그인해주세요.', 'default');
}
// 응답이 성공(2xx)이지만 사용자 정보가 없는 경우 또는 응답 본문이 비어있는 경우
else if (response.ok) {
// 응답 본문이 비어 있는 경우는 서버가 성공을 반환했지만 데이터가 없는 경우 (일부 Supabase 버전에서 발생)
showAuthToast('회원가입 요청 완료', '회원가입 요청이 처리되었습니다. 이메일을 확인하거나 로그인을 시도해보세요.', 'default');
return {
error: null,
user: { email },
message: '회원가입 처리 완료'
};
} else {
// 예상치 못한 응답 형식
const errorMessage = '회원가입 처리 중 오류가 발생했습니다. 나중에 다시 시도하세요.';
}
// 401 오류인 경우 인증 실패로 처리
else if (response.status === 401) {
const errorMessage = '회원가입 권한이 없습니다. Supabase 설정 또는 권한을 확인하세요.';
showAuthToast('회원가입 실패', errorMessage, 'destructive');
return { error: { message: errorMessage }, user: null };
}
// 다른 모든 오류 상태
else {
// 응답 상태 코드에 따른 오류 메시지
let errorMessage;
if (response.status === 400) {
errorMessage = '잘못된 요청 형식입니다. 입력 데이터를 확인하세요.';
} else if (response.status === 500) {
errorMessage = '서버 내부 오류가 발생했습니다. 나중에 다시 시도하세요.';
} else {
errorMessage = `회원가입 처리 중 오류가 발생했습니다 (${response.status}). 나중에 다시 시도하세요.`;
}
showAuthToast('회원가입 실패', errorMessage, 'destructive');
return { error: { message: errorMessage }, user: null };
}
@@ -143,7 +174,12 @@ export const signUpWithDirectApi = async (email: string, password: string, usern
// 오류 메시지 설정 및 프록시 추천
let errorMessage = error.message || '알 수 없는 오류가 발생했습니다.';
if (errorMessage.includes('Failed to fetch') ||
// 타임아웃 오류 감지
if (errorMessage.includes('timed out') || errorMessage.includes('timeout')) {
errorMessage = '서버 응답 시간이 초과되었습니다. 네트워크 상태를 확인하고 다시 시도하세요.';
}
// CORS 또는 네트워크 오류 감지
else if (errorMessage.includes('Failed to fetch') ||
errorMessage.includes('NetworkError') ||
errorMessage.includes('CORS')) {
if (!usingProxy) {