Remove demo mode

Removes demo mode to ensure proper Supabase functionality.
This commit is contained in:
gpt-engineer-app[bot]
2025-03-15 10:20:14 +00:00
parent 7b2ce776e4
commit 8e1f2de87e
3 changed files with 27 additions and 110 deletions

View File

@@ -14,22 +14,6 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children
const [loading, setLoading] = useState(true);
useEffect(() => {
// 데모 모드 사용자 체크
const checkDemoUser = () => {
const demoUser = localStorage.getItem('demo_user');
if (demoUser) {
try {
const parsedUser = JSON.parse(demoUser) as User;
setUser(parsedUser);
// 데모 모드에서는 session이 null이지만 user는 있을 수 있음
setSession(null);
} catch (error) {
console.error('데모 사용자 파싱 오류:', error);
localStorage.removeItem('demo_user');
}
}
};
// 현재 세션 체크
const getSession = async () => {
try {
@@ -37,19 +21,12 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children
if (error) {
console.error('세션 로딩 중 오류:', error);
// 실제 세션 로드 실패 시 데모 모드 사용자 확인
checkDemoUser();
} else if (data.session) {
setSession(data.session);
setUser(data.session.user);
} else {
// 세션이 없을 때 데모 모드 사용자 확인
checkDemoUser();
}
} catch (error) {
console.error('세션 확인 중 예외 발생:', error);
// 예외 발생 시 데모 모드 사용자 확인
checkDemoUser();
} finally {
setLoading(false);
}
@@ -63,18 +40,11 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children
console.log('Supabase auth 이벤트:', event);
if (session) {
// 실제 세션이 있으면 데모 모드 사용자 제거
localStorage.removeItem('demo_user');
setSession(session);
setUser(session.user);
} else if (event === 'SIGNED_OUT') {
// 로그아웃 시 데모 모드 사용자도 제거
localStorage.removeItem('demo_user');
setSession(null);
setUser(null);
} else {
// 세션이 없을 때 데모 모드 사용자 확인
checkDemoUser();
}
setLoading(false);
@@ -87,25 +57,6 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children
};
}, []);
// signOut 메소드 재정의 - 데모 모드 지원
const handleSignOut = async () => {
// 데모 모드 사용자 체크
const demoUser = localStorage.getItem('demo_user');
if (demoUser) {
localStorage.removeItem('demo_user');
setUser(null);
setSession(null);
toast({
title: '로그아웃 성공',
description: '다음에 또 만나요!',
});
return;
}
// 실제 Supabase 로그아웃
await authActions.signOut();
};
// 인증 작업 메서드들
const value: AuthContextType = {
session,
@@ -113,7 +64,7 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children
loading,
signIn: authActions.signIn,
signUp: authActions.signUp,
signOut: handleSignOut,
signOut: authActions.signOut,
resetPassword: authActions.resetPassword,
};

View File

@@ -6,31 +6,8 @@ export const signIn = async (email: string, password: string) => {
try {
console.log('로그인 시도 중:', email);
// 데모 모드: 실제 API 호출 대신 직접 성공 응답 반환
// 실제 환경에서는 이 코드를 제거하고 아래의 주석 처리된 코드를 사용하세요
toast({
title: '데모 모드 로그인',
description: '데모 모드에서는 실제 로그인이 처리되지 않습니다.',
});
const { data, error } = await supabase.auth.signInWithPassword({ email, password });
// 성공 메시지
toast({
title: '로그인 성공',
description: '환영합니다!',
});
// 가짜 사용자 세션 생성
localStorage.setItem('demo_user', JSON.stringify({
id: 'demo-user-id',
email: email,
user_metadata: { username: email.split('@')[0] },
created_at: new Date().toISOString()
}));
return { error: null };
/* 실제 Supabase 코드 - 데모 모드가 아닐 때 사용
const { error } = await supabase.auth.signInWithPassword({ email, password });
if (error) {
console.error('로그인 오류:', error);
toast({
@@ -45,8 +22,8 @@ export const signIn = async (email: string, password: string) => {
title: '로그인 성공',
description: '환영합니다!',
});
return { error: null };
*/
return { error: null, user: data.user };
} catch (error: any) {
console.error('로그인 중 예외 발생:', error);
@@ -68,32 +45,6 @@ export const signUp = async (email: string, password: string, username: string)
try {
console.log('회원가입 시도:', { email, username });
// 데모 모드에서는 회원가입 성공으로 처리합니다.
// 실제 환경에서는 이 부분을 제거하고 아래의 supabase.auth.signUp 호출을 사용하세요.
const mockUser = {
id: 'mock-user-id',
email,
user_metadata: { username },
created_at: new Date().toISOString()
};
// 데모 알림 표시
toast({
title: '데모 모드 알림',
description: '현재 데모 모드에서 실행 중입니다. 실제 계정이 생성되지 않습니다.',
});
// 성공 메시지 표시
toast({
title: '회원가입 성공',
description: '환영합니다! 이제 서비스를 이용할 수 있습니다.',
});
return { error: null, user: mockUser };
// 아래는 실제 Supabase 회원가입 코드입니다.
// 데모 모드가 아닌 경우 이 코드를 사용하세요.
/*
const { data, error } = await supabase.auth.signUp({
email,
password,
@@ -120,7 +71,6 @@ export const signUp = async (email: string, password: string, username: string)
});
return { error: null, user: data.user };
*/
} catch (error: any) {
console.error('회원가입 중 예외 발생:', error);

View File

@@ -2,14 +2,31 @@
import { createClient } from '@supabase/supabase-js';
// 온프레미스 Supabase URL과 anon key 설정
const supabaseUrl = process.env.SUPABASE_URL || 'http://your-onpremise-supabase-url.com';
// 온프레미스 anon key 설정
const supabaseAnonKey = process.env.SUPABASE_ANON_KEY || 'your-onpremise-anon-key';
const getSupabaseUrl = () => {
// 로컬 스토리지에서 설정된 URL을 우선 사용
const storedUrl = localStorage.getItem('supabase_url');
if (storedUrl) return storedUrl;
// 환경 변수 또는 기본값 사용
return process.env.SUPABASE_URL || 'http://your-onpremise-supabase-url.com';
};
const getSupabaseKey = () => {
// 로컬 스토리지에서 설정된 키를 우선 사용
const storedKey = localStorage.getItem('supabase_key');
if (storedKey) return storedKey;
// 환경 변수 또는 기본값 사용
return process.env.SUPABASE_ANON_KEY || 'your-onpremise-anon-key';
};
const supabaseUrl = getSupabaseUrl();
const supabaseAnonKey = getSupabaseKey();
// 유효한 URL이 설정되었는지 확인
const isValidUrl = supabaseUrl && supabaseAnonKey &&
!supabaseUrl.includes('YOUR_SUPABASE_URL') &&
!supabaseAnonKey.includes('YOUR_SUPABASE_ANON_KEY');
!supabaseUrl.includes('your-onpremise-supabase-url') &&
!supabaseAnonKey.includes('your-onpremise-anon-key');
let supabaseClient;
@@ -45,7 +62,7 @@ try {
// 유효성 검사 로그
if (!isValidUrl) {
console.warn('경고: 유효하지 않은 Supabase URL 또는 Anon Key가 감지되었습니다.');
console.warn('경고: 기본 Supabase URL 또는 Anon Key가 감지되었습니다. Supabase 설정 페이지에서 온프레미스 설정을 구성하세요.');
}
} catch (error) {
console.error('Supabase 클라이언트 생성 오류:', error);
@@ -79,4 +96,3 @@ export const configureSupabase = (url: string, key: string) => {
// 페이지 새로고침 - 새로운 설정으로 Supabase 클라이언트 초기화
window.location.reload();
};