/** * [인증 관련 상수 정의] * * 인증 모듈 전체에서 공통으로 사용하는 상수들을 정의합니다. * - 에러 메시지 * - 라우트 경로 * - 검증 규칙 */ // ======================================== // 에러 메시지 상수 // ======================================== /** * 인증 에러 메시지 매핑 * Supabase의 영문 에러를 한글로 변환하기 위한 매핑 테이블 */ export const AUTH_ERROR_MESSAGES = { // === 로그인/회원가입 관련 === INVALID_CREDENTIALS: "이메일 또는 비밀번호가 일치하지 않습니다.", USER_EXISTS: "이미 가입된 이메일 주소입니다.", EMAIL_NOT_CONFIRMED: "이메일 인증이 완료되지 않았습니다.", // === 입력값 검증 === EMPTY_FIELDS: "이메일과 비밀번호를 모두 입력해 주세요.", EMPTY_EMAIL: "이메일을 입력해 주세요.", INVALID_EMAIL: "올바른 이메일 형식이 아닙니다.", // === 비밀번호 관련 === PASSWORD_TOO_SHORT: "비밀번호는 최소 6자 이상이어야 합니다.", PASSWORD_TOO_WEAK: "비밀번호는 최소 6자 이상, 숫자, 특수문자를 각각 1개 이상 포함해야 합니다.", PASSWORD_SAME_AS_OLD: "새 비밀번호는 기존 비밀번호와 달라야 합니다.", // === 비밀번호 재설정 === PASSWORD_RESET_SENT: "비밀번호 재설정 링크를 이메일로 발송했습니다.", PASSWORD_RESET_SUCCESS: "비밀번호가 성공적으로 변경되었습니다.", PASSWORD_RESET_FAILED: "비밀번호 변경에 실패했습니다.", // === 인증 링크 === INVALID_AUTH_LINK: "인증 링크가 만료되었거나 유효하지 않습니다.", // === Rate Limit === EMAIL_RATE_LIMIT: "이메일 발송 제한을 초과했습니다. 잠시 후 다시 시도해 주세요.", EMAIL_RATE_LIMIT_DETAILED: "이메일 발송 제한을 초과했습니다. Supabase 무료 플랜은 시간당 이메일 발송 횟수가 제한됩니다. 약 1시간 후에 다시 시도해 주세요.", // === 기타 === DEFAULT: "요청을 처리하는 중 오류가 발생했습니다.", } as const; // ======================================== // 라우트 경로 상수 // ======================================== /** * 인증 관련 라우트 경로 */ export const AUTH_ROUTES = { LOGIN: "/login", SIGNUP: "/signup", FORGOT_PASSWORD: "/forgot-password", RESET_PASSWORD: "/reset-password", AUTH_CONFIRM: "/auth/confirm", AUTH_CALLBACK: "/auth/callback", HOME: "/", } as const; /** * 로그인 없이 접근 가능한 페이지 목록 * 미들웨어에서 라우트 보호에 사용 */ export const PUBLIC_AUTH_PAGES = [ AUTH_ROUTES.LOGIN, AUTH_ROUTES.SIGNUP, AUTH_ROUTES.FORGOT_PASSWORD, AUTH_ROUTES.RESET_PASSWORD, AUTH_ROUTES.AUTH_CONFIRM, AUTH_ROUTES.AUTH_CALLBACK, ] as const; // ======================================== // 검증 규칙 상수 // ======================================== /** * 비밀번호 검증 규칙 */ export const PASSWORD_RULES = { MIN_LENGTH: 6, REQUIRE_NUMBER: true, REQUIRE_SPECIAL_CHAR: true, } as const; // ======================================== // 타입 정의 // ======================================== /** * 인증 폼 데이터 타입 */ export type AuthFormData = { email: string; password: string; }; /** * 인증 에러 타입 */ export type AuthError = { message: string; type: "validation" | "auth" | "unknown"; };