- Add GitHub Actions workflow for automated CI/CD - Configure Node.js 18.x and 20.x matrix testing - Add TypeScript type checking step - Add ESLint code quality checks with enhanced rules - Add Prettier formatting verification - Add production build validation - Upload build artifacts for deployment - Set up automated testing on push/PR - Replace console.log with environment-aware logger - Add pre-commit hooks for code quality - Exclude archive folder from linting 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
59 lines
2.1 KiB
TypeScript
59 lines
2.1 KiB
TypeScript
import { supabase } from "@/archive/lib/supabase";
|
|
import { authLogger } from "@/utils/logger";
|
|
import { showAuthToast } from "@/utils/auth";
|
|
|
|
/**
|
|
* 로그인 기능 - Supabase Cloud 환경에 최적화
|
|
*/
|
|
export const signInWithDirectApi = async (email: string, password: string) => {
|
|
authLogger.info("Supabase Cloud 로그인 시도");
|
|
|
|
try {
|
|
// Supabase Cloud를 통한 로그인 요청
|
|
const { data, error } = await supabase.auth.signInWithPassword({
|
|
email,
|
|
password,
|
|
});
|
|
|
|
// 오류 응답 처리
|
|
if (error) {
|
|
authLogger.error("로그인 오류:", error);
|
|
|
|
// 오류 메시지 포맷팅
|
|
let errorMessage = error.message;
|
|
|
|
if (error.message.includes("Invalid login credentials")) {
|
|
errorMessage = "이메일 또는 비밀번호가 올바르지 않습니다.";
|
|
} else if (error.message.includes("Email not confirmed")) {
|
|
errorMessage =
|
|
"이메일 인증이 완료되지 않았습니다. 이메일을 확인해주세요.";
|
|
}
|
|
|
|
showAuthToast("로그인 실패", errorMessage, "destructive");
|
|
return { error: { message: errorMessage }, user: null };
|
|
}
|
|
|
|
// 로그인 성공 처리
|
|
if (data && data.user) {
|
|
authLogger.info("로그인 성공:", data.user);
|
|
showAuthToast("로그인 성공", "환영합니다!");
|
|
return { error: null, user: data.user };
|
|
} else {
|
|
// 사용자 정보가 없는 경우 (드문 경우)
|
|
authLogger.warn("로그인 성공했지만 사용자 정보가 없습니다");
|
|
showAuthToast(
|
|
"로그인 부분 성공",
|
|
"로그인은 성공했지만 사용자 정보를 가져오지 못했습니다.",
|
|
"default"
|
|
);
|
|
return { error: { message: "사용자 정보 조회 실패" }, user: null };
|
|
}
|
|
} catch (error: any) {
|
|
authLogger.error("로그인 요청 중 예외:", error);
|
|
const errorMessage = error.message || "로그인 중 오류가 발생했습니다.";
|
|
|
|
showAuthToast("로그인 요청 실패", errorMessage, "destructive");
|
|
return { error: { message: errorMessage }, user: null };
|
|
}
|
|
};
|