diff options
Diffstat (limited to 'app/api/auth/first-auth/route.ts')
| -rw-r--r-- | app/api/auth/first-auth/route.ts | 46 |
1 files changed, 40 insertions, 6 deletions
diff --git a/app/api/auth/first-auth/route.ts b/app/api/auth/first-auth/route.ts index ff92e71c..e8d86a02 100644 --- a/app/api/auth/first-auth/route.ts +++ b/app/api/auth/first-auth/route.ts @@ -18,6 +18,7 @@ interface FirstAuthResponse { userId?: number email?: string error?: string + errorCode?: string } export async function POST(request: NextRequest): Promise<NextResponse<FirstAuthResponse>> { @@ -63,19 +64,52 @@ export async function POST(request: NextRequest): Promise<NextResponse<FirstAuth const authResult = await authHelpers.performFirstAuth(username, password, provider) if (!authResult.success) { - // 인증 실패 응답 + // 인증 실패 응답 - 세분화된 에러 코드 처리 let errorMessage = '인증에 실패했습니다.' + let errorCode = 'AUTHENTICATION_FAILED' - if (provider === 'sgips') { - errorMessage = 'S-Gips 계정 정보가 올바르지 않습니다.' - } else { - errorMessage = '이메일 또는 비밀번호가 올바르지 않습니다.' + // authResult.error에서 세분화된 에러 타입 확인 + if (authResult.error) { + switch (authResult.error) { + case 'INVALID_CREDENTIALS': + errorCode = 'INVALID_CREDENTIALS' + errorMessage = provider === 'sgips' + ? 'S-GIPS 계정 정보를 확인해주세요.' + : '이메일 또는 비밀번호를 확인해주세요.' + break + case 'ACCOUNT_LOCKED': + errorCode = 'ACCOUNT_LOCKED' + errorMessage = '계정이 일시적으로 잠겼습니다. 잠시 후 다시 시도해주세요.' + break + case 'ACCOUNT_DEACTIVATED': + errorCode = 'ACCOUNT_DEACTIVATED' + errorMessage = '비활성화된 계정입니다. 관리자에게 문의해주세요.' + break + case 'RATE_LIMITED': + errorCode = 'RATE_LIMITED' + errorMessage = '로그인 시도가 너무 많습니다. 잠시 후 다시 시도해주세요.' + break + case 'VENDOR_NOT_FOUND': + errorCode = 'VENDOR_NOT_FOUND' + errorMessage = '등록되지 않은 벤더입니다. 담당자에게 문의해주세요.' + break + case 'SYSTEM_ERROR': + errorCode = 'SYSTEM_ERROR' + errorMessage = '일시적인 시스템 오류입니다. 계속 문제가 발생하면 담당자에게 문의해주세요.' + break + default: + errorCode = 'AUTHENTICATION_FAILED' + errorMessage = provider === 'sgips' + ? 'S-Gips 인증에 실패했습니다.' + : '인증에 실패했습니다.' + } } return NextResponse.json( { success: false, - error: authResult.error || errorMessage + error: errorMessage, + errorCode: errorCode }, { status: 401 } ) |
