Remove offline mode
The offline mode was removed to focus on resolving connection issues instead of providing a workaround.
This commit is contained in:
@@ -4,12 +4,7 @@ import { useNavigate } from "react-router-dom";
|
||||
import { useToast } from "@/hooks/useToast.wrapper";
|
||||
import { useAuth } from "@/contexts/auth";
|
||||
import { useTableSetup } from "@/hooks/useTableSetup";
|
||||
import {
|
||||
getLoginErrorMessage,
|
||||
showLoginErrorToast,
|
||||
showLoginSuccessToast,
|
||||
isCorsOrJsonError
|
||||
} from "@/utils/auth/loginUtils";
|
||||
import { getLoginErrorMessage, showLoginErrorToast, showLoginSuccessToast } from "@/utils/auth/loginUtils";
|
||||
|
||||
export function useLogin() {
|
||||
const [email, setEmail] = useState("");
|
||||
@@ -17,64 +12,12 @@ 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
|
||||
);
|
||||
|
||||
const navigate = useNavigate();
|
||||
const { toast } = useToast();
|
||||
const { signIn } = useAuth();
|
||||
const { isSettingUpTables, setupTables } = useTableSetup();
|
||||
|
||||
// 네트워크 상태 감지
|
||||
useEffect(() => {
|
||||
const handleOnline = () => {
|
||||
if (isOfflineMode && navigator.onLine) {
|
||||
toast({
|
||||
title: "네트워크 연결됨",
|
||||
description: "인터넷에 다시 연결되었습니다. 온라인 모드로 전환할 수 있습니다.",
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
const handleOffline = () => {
|
||||
if (!isOfflineMode) {
|
||||
toast({
|
||||
title: "네트워크 연결 끊김",
|
||||
description: "인터넷 연결이 끊겼습니다. 오프라인 모드로 전환합니다.",
|
||||
variant: "destructive"
|
||||
});
|
||||
// 자동으로 오프라인 모드로 전환
|
||||
setIsOfflineMode(true);
|
||||
localStorage.setItem('offline_mode', 'true');
|
||||
}
|
||||
};
|
||||
|
||||
window.addEventListener('online', handleOnline);
|
||||
window.addEventListener('offline', handleOffline);
|
||||
|
||||
return () => {
|
||||
window.removeEventListener('online', handleOnline);
|
||||
window.removeEventListener('offline', handleOffline);
|
||||
};
|
||||
}, [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);
|
||||
@@ -91,12 +34,14 @@ export function useLogin() {
|
||||
setIsLoading(true);
|
||||
|
||||
try {
|
||||
// 오프라인 모드를 위한 환경 설정
|
||||
if (isOfflineMode) {
|
||||
localStorage.setItem('offline_mode', 'true');
|
||||
// 오프라인 모드에서는 로컬 인증만 수행하고 바로 진행
|
||||
showLoginSuccessToast('오프라인 모드');
|
||||
navigate("/");
|
||||
// API 호출 전에 URL 유효성 확인
|
||||
const supabaseUrl = localStorage.getItem('supabase_url');
|
||||
if (!supabaseUrl || supabaseUrl.trim() === '') {
|
||||
toast({
|
||||
title: "설정 오류",
|
||||
description: "Supabase URL이 설정되지 않았습니다. 설정 페이지에서 구성하세요.",
|
||||
variant: "destructive"
|
||||
});
|
||||
setIsLoading(false);
|
||||
return;
|
||||
}
|
||||
@@ -109,23 +54,18 @@ export function useLogin() {
|
||||
setLoginError(errorMessage);
|
||||
showLoginErrorToast(errorMessage);
|
||||
|
||||
// 404 오류인 경우 오프라인 모드 제안
|
||||
// 404 오류인 경우 경로 설정 확인 제안
|
||||
if (errorMessage.includes('404') || errorMessage.includes('Not Found')) {
|
||||
toast({
|
||||
title: "오프라인 모드 제안",
|
||||
description: "서버에 연결할 수 없습니다. 오프라인 모드를 사용해보세요.",
|
||||
variant: "default"
|
||||
title: "서버 연결 문제",
|
||||
description: "Supabase URL 설정을 확인하세요. 서버 주소가 올바른지 확인하세요.",
|
||||
variant: "destructive"
|
||||
});
|
||||
}
|
||||
} else if (user) {
|
||||
// 로그인 성공
|
||||
showLoginSuccessToast();
|
||||
|
||||
// 온라인 모드에서만 테이블 설정
|
||||
if (!isOfflineMode) {
|
||||
await setupTables();
|
||||
}
|
||||
|
||||
await setupTables();
|
||||
navigate("/");
|
||||
} else {
|
||||
// user가 없지만 error도 없는 경우 (드문 경우)
|
||||
@@ -147,17 +87,6 @@ export function useLogin() {
|
||||
description: errorMessage,
|
||||
variant: "destructive"
|
||||
});
|
||||
|
||||
// 네트워크 관련 오류인 경우 오프라인 모드 제안
|
||||
if (errorMessage.includes('network') ||
|
||||
errorMessage.includes('fetch') ||
|
||||
errorMessage.includes('서버')) {
|
||||
toast({
|
||||
title: "오프라인 모드 제안",
|
||||
description: "서버 연결에 문제가 있습니다. 오프라인 모드를 사용해보세요.",
|
||||
variant: "default"
|
||||
});
|
||||
}
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
}
|
||||
@@ -174,9 +103,6 @@ export function useLogin() {
|
||||
isSettingUpTables,
|
||||
loginError,
|
||||
setLoginError,
|
||||
isOfflineMode,
|
||||
setIsOfflineMode,
|
||||
handleLogin,
|
||||
isCorsOrJsonError: (msg: string | null) => isCorsOrJsonError(msg)
|
||||
handleLogin
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user