Migrate from Supabase to Appwrite with core functionality and UI components
This commit is contained in:
@@ -1,45 +1,44 @@
|
||||
|
||||
import { supabase } from '@/lib/supabase';
|
||||
import { account } from '@/lib/appwrite/client';
|
||||
import { showAuthToast } from '@/utils/auth';
|
||||
|
||||
/**
|
||||
* 로그인 기능 - Supabase Cloud 환경에 최적화
|
||||
* 로그인 기능 - Appwrite 환경에 최적화
|
||||
*/
|
||||
export const signIn = async (email: string, password: string) => {
|
||||
try {
|
||||
console.log('로그인 시도 중:', email);
|
||||
|
||||
// Supabase 인증 방식 시도
|
||||
const { data, error } = await supabase.auth.signInWithPassword({
|
||||
email,
|
||||
password
|
||||
});
|
||||
// 비동기 작업을 마이크로태스크로 지연하여 UI 차단 방지
|
||||
await new Promise<void>(resolve => queueMicrotask(() => resolve()));
|
||||
|
||||
if (!error && data.user) {
|
||||
showAuthToast('로그인 성공', '환영합니다!');
|
||||
return { error: null, user: data.user };
|
||||
} else if (error) {
|
||||
console.error('로그인 오류:', error.message);
|
||||
// Appwrite 인증 방식 시도
|
||||
try {
|
||||
const session = await account.createEmailSession(email, password);
|
||||
const user = await account.get();
|
||||
|
||||
let errorMessage = error.message;
|
||||
if (error.message.includes('Invalid login credentials')) {
|
||||
// 상태 업데이트를 마이크로태스크로 지연
|
||||
await new Promise<void>(resolve => queueMicrotask(() => resolve()));
|
||||
|
||||
showAuthToast('로그인 성공', '환영합니다!');
|
||||
return { error: null, user };
|
||||
} catch (authError: any) {
|
||||
console.error('로그인 오류:', authError);
|
||||
|
||||
let errorMessage = authError.message || '알 수 없는 오류가 발생했습니다.';
|
||||
|
||||
// Appwrite 오류 코드에 따른 사용자 친화적 메시지
|
||||
if (authError.code === 401) {
|
||||
errorMessage = '이메일 또는 비밀번호가 올바르지 않습니다.';
|
||||
} else if (error.message.includes('Email not confirmed')) {
|
||||
errorMessage = '이메일 인증이 완료되지 않았습니다. 이메일을 확인해주세요.';
|
||||
} else if (authError.code === 429) {
|
||||
errorMessage = '너무 많은 로그인 시도가 있었습니다. 잠시 후 다시 시도해주세요.';
|
||||
}
|
||||
|
||||
showAuthToast('로그인 실패', errorMessage, 'destructive');
|
||||
return { error: { message: errorMessage }, user: null };
|
||||
return { error: authError, user: null };
|
||||
}
|
||||
|
||||
// 여기까지 왔다면 오류가 발생한 것
|
||||
showAuthToast('로그인 실패', '로그인 처리 중 오류가 발생했습니다.', 'destructive');
|
||||
return { error: { message: '로그인 처리 중 오류가 발생했습니다.' }, user: null };
|
||||
} catch (error: any) {
|
||||
console.error('로그인 중 예외 발생:', error);
|
||||
const errorMessage = error.message || '로그인 중 오류가 발생했습니다.';
|
||||
|
||||
showAuthToast('로그인 오류', errorMessage, 'destructive');
|
||||
return { error: { message: errorMessage }, user: null };
|
||||
} catch (error) {
|
||||
console.error('로그인 예외 발생:', error);
|
||||
showAuthToast('로그인 오류', '서버 연결 중 오류가 발생했습니다.', 'destructive');
|
||||
return { error, user: null };
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user