Update error message
Update the error message displayed during sign-up.
This commit is contained in:
@@ -23,7 +23,8 @@ export const signUp = async (email: string, password: string, username: string)
|
||||
options: {
|
||||
data: {
|
||||
username, // 사용자 이름을 메타데이터에 저장
|
||||
}
|
||||
},
|
||||
emailRedirectTo: window.location.origin + '/login' // 이메일 인증 완료 후 리디렉션 URL
|
||||
}
|
||||
});
|
||||
|
||||
@@ -34,7 +35,8 @@ export const signUp = async (email: string, password: string, username: string)
|
||||
if (error.message.includes('json') ||
|
||||
error.message.includes('Unexpected end') ||
|
||||
error.message.includes('404') ||
|
||||
error.message.includes('Not Found')) {
|
||||
error.message.includes('Not Found') ||
|
||||
error.message.includes('Failed to fetch')) {
|
||||
console.warn('기본 회원가입 실패, 직접 API 호출 시도:', error.message);
|
||||
return await signUpWithDirectApi(email, password, username);
|
||||
}
|
||||
@@ -76,8 +78,12 @@ export const signUp = async (email: string, password: string, username: string)
|
||||
|
||||
// 사용자 데이터가 없는 경우 (드물게 발생)
|
||||
console.warn('회원가입 응답은 성공했지만 사용자 데이터가 없습니다');
|
||||
showAuthToast('회원가입 문제', '계정이 생성되었으나 응답에 사용자 정보가 없습니다.', 'destructive');
|
||||
return { error: { message: '회원가입 완료 처리 중 문제가 발생했습니다.' }, user: null };
|
||||
showAuthToast('회원가입 성공', '계정이 생성되었습니다. 로그인해주세요.', 'default');
|
||||
return {
|
||||
error: null,
|
||||
user: { email },
|
||||
message: '회원가입 완료'
|
||||
};
|
||||
} catch (error: any) {
|
||||
console.error('기본 회원가입 프로세스 예외:', error);
|
||||
|
||||
@@ -86,7 +92,9 @@ export const signUp = async (email: string, password: string, username: string)
|
||||
error.message.includes('json') ||
|
||||
error.message.includes('fetch') ||
|
||||
error.message.includes('404') ||
|
||||
error.message.includes('Not Found'))) {
|
||||
error.message.includes('Not Found') ||
|
||||
error.message.includes('timed out') ||
|
||||
error.message.includes('Failed to fetch'))) {
|
||||
console.warn('직접 API 호출로 재시도:', error);
|
||||
return await signUpWithDirectApi(email, password, username);
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user