Investigate login/register 404 errors
Investigate and address persistent 404 errors occurring during login and registration processes.
This commit is contained in:
@@ -17,6 +17,7 @@ export function useLogin() {
|
||||
const [showPassword, setShowPassword] = useState(false);
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
const [loginError, setLoginError] = useState<string | null>(null);
|
||||
// 네트워크 연결이 끊겼거나 로컬 스토리지에 오프라인 모드 설정이 있으면 기본값을 true로 설정
|
||||
const [isOfflineMode, setIsOfflineMode] = useState(() =>
|
||||
localStorage.getItem('offline_mode') === 'true' || !navigator.onLine
|
||||
);
|
||||
@@ -41,9 +42,12 @@ export function useLogin() {
|
||||
if (!isOfflineMode) {
|
||||
toast({
|
||||
title: "네트워크 연결 끊김",
|
||||
description: "인터넷 연결이 끊겼습니다. 오프라인 모드로 전환할 수 있습니다.",
|
||||
description: "인터넷 연결이 끊겼습니다. 오프라인 모드로 전환합니다.",
|
||||
variant: "destructive"
|
||||
});
|
||||
// 자동으로 오프라인 모드로 전환
|
||||
setIsOfflineMode(true);
|
||||
localStorage.setItem('offline_mode', 'true');
|
||||
}
|
||||
};
|
||||
|
||||
@@ -56,6 +60,21 @@ export function useLogin() {
|
||||
};
|
||||
}, [isOfflineMode, toast]);
|
||||
|
||||
// 로그인 시도 중 404 오류가 발생하면 자동으로 오프라인 모드 제안
|
||||
useEffect(() => {
|
||||
if (loginError && (
|
||||
loginError.includes('404') ||
|
||||
loginError.includes('Not Found') ||
|
||||
loginError.includes('서버 연결')
|
||||
)) {
|
||||
toast({
|
||||
title: "서버 연결 문제",
|
||||
description: "서버에 연결할 수 없습니다. 오프라인 모드를 사용해보세요.",
|
||||
variant: "destructive"
|
||||
});
|
||||
}
|
||||
}, [loginError, toast]);
|
||||
|
||||
const handleLogin = async (e: React.FormEvent) => {
|
||||
e.preventDefault();
|
||||
setLoginError(null);
|
||||
@@ -75,6 +94,11 @@ export function useLogin() {
|
||||
// 오프라인 모드를 위한 환경 설정
|
||||
if (isOfflineMode) {
|
||||
localStorage.setItem('offline_mode', 'true');
|
||||
// 오프라인 모드에서는 로컬 인증만 수행하고 바로 진행
|
||||
showLoginSuccessToast('오프라인 모드');
|
||||
navigate("/");
|
||||
setIsLoading(false);
|
||||
return;
|
||||
}
|
||||
|
||||
const { error, user } = await signIn(email, password);
|
||||
@@ -84,6 +108,15 @@ export function useLogin() {
|
||||
const errorMessage = getLoginErrorMessage(error);
|
||||
setLoginError(errorMessage);
|
||||
showLoginErrorToast(errorMessage);
|
||||
|
||||
// 404 오류인 경우 오프라인 모드 제안
|
||||
if (errorMessage.includes('404') || errorMessage.includes('Not Found')) {
|
||||
toast({
|
||||
title: "오프라인 모드 제안",
|
||||
description: "서버에 연결할 수 없습니다. 오프라인 모드를 사용해보세요.",
|
||||
variant: "default"
|
||||
});
|
||||
}
|
||||
} else if (user) {
|
||||
// 로그인 성공
|
||||
showLoginSuccessToast();
|
||||
@@ -114,6 +147,17 @@ export function useLogin() {
|
||||
description: errorMessage,
|
||||
variant: "destructive"
|
||||
});
|
||||
|
||||
// 네트워크 관련 오류인 경우 오프라인 모드 제안
|
||||
if (errorMessage.includes('network') ||
|
||||
errorMessage.includes('fetch') ||
|
||||
errorMessage.includes('서버')) {
|
||||
toast({
|
||||
title: "오프라인 모드 제안",
|
||||
description: "서버 연결에 문제가 있습니다. 오프라인 모드를 사용해보세요.",
|
||||
variant: "default"
|
||||
});
|
||||
}
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user