회원가입
This commit is contained in:
114
features/auth/constants.ts
Normal file
114
features/auth/constants.ts
Normal file
@@ -0,0 +1,114 @@
|
||||
/**
|
||||
* [인증 관련 상수 정의]
|
||||
*
|
||||
* 인증 모듈 전체에서 공통으로 사용하는 상수들을 정의합니다.
|
||||
* - 에러 메시지
|
||||
* - 라우트 경로
|
||||
* - 검증 규칙
|
||||
*/
|
||||
|
||||
// ========================================
|
||||
// 에러 메시지 상수
|
||||
// ========================================
|
||||
|
||||
/**
|
||||
* 인증 에러 메시지 매핑
|
||||
* 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";
|
||||
};
|
||||
Reference in New Issue
Block a user