naver static method
네이버 에러 메시지 → KAuthError
매핑 전략
네이버 SDK는 상세한 에러 코드를 제공하지 않아 문자열 패턴 매칭을 사용합니다.
패턴은 _NaverErrorPatterns에 상수로 정의되어 있어 테스트와 유지보수가 용이합니다.
매핑 우선순위
- 사용자 취소 (cancel, 취소, denied, 거부)
- 네트워크 에러 (network, timeout, 연결 등)
- URL/콜백 에러 (url, scheme, callback, redirect)
- 클라이언트 에러 (client, invalid, unauthorized 등)
- 토큰 만료 (token, expired, 만료, 세션)
- 기본 에러
URL/콜백 에러가 클라이언트 에러보다 우선순위가 높습니다. (예: "invalid redirect url"은 콜백 에러로 분류)
Implementation
static KAuthError naver(String errorMessage, {Object? originalError}) {
final msg = errorMessage.toLowerCase();
// 1. 사용자 취소
if (_NaverErrorPatterns.matchesCancel(msg)) {
return KAuthError.fromCode(ErrorCodes.userCancelled,
originalError: originalError);
}
// 2. 네트워크/타임아웃 에러
if (_NaverErrorPatterns.matchesNetwork(msg)) {
return KAuthError(
code: ErrorCodes.networkError,
message: '네트워크 오류가 발생했습니다.',
hint: '인터넷 연결을 확인해주세요.',
originalError: originalError,
);
}
// 3. URL 스킴/콜백 오류 (클라이언트 오류보다 먼저 체크)
if (_NaverErrorPatterns.matchesCallback(msg)) {
return KAuthError(
code: ErrorCodes.naverInvalidCallback,
message: '콜백 URL 설정 오류입니다.',
hint: 'URL 스킴, 콜백 URL, Info.plist를 확인하세요.',
docs: 'https://developers.naver.com/apps',
originalError: originalError,
);
}
// 4. 클라이언트/OAuth 정보 오류
if (_NaverErrorPatterns.matchesClient(msg)) {
return KAuthError(
code: ErrorCodes.naverClientInfoInvalid,
message: '네이버 클라이언트 정보가 유효하지 않습니다.',
hint: 'Client ID/Secret을 확인하세요.',
docs: 'https://developers.naver.com/apps',
originalError: originalError,
);
}
// 5. 토큰 만료
if (_NaverErrorPatterns.matchesTokenExpired(msg)) {
return KAuthError(
code: ErrorCodes.tokenExpired,
message: '인증 정보가 만료되었습니다.',
hint: '다시 로그인해주세요.',
originalError: originalError,
);
}
// 6. 기본 에러
return KAuthError(
code: ErrorCodes.loginFailed,
message: '네이버 로그인 중 오류가 발생했습니다.',
hint: errorMessage.isNotEmpty ? errorMessage : '다시 시도해주세요.',
docs: 'https://developers.naver.com/apps',
originalError: originalError,
);
}