summaryrefslogtreecommitdiff
path: root/app/api/auth/first-auth/route.ts
diff options
context:
space:
mode:
Diffstat (limited to 'app/api/auth/first-auth/route.ts')
-rw-r--r--app/api/auth/first-auth/route.ts46
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 }
)