naver static method

KAuthError naver(
  1. String errorMessage, {
  2. Object? originalError,
})

네이버 에러 메시지 → KAuthError

매핑 전략

네이버 SDK는 상세한 에러 코드를 제공하지 않아 문자열 패턴 매칭을 사용합니다. 패턴은 _NaverErrorPatterns에 상수로 정의되어 있어 테스트와 유지보수가 용이합니다.

매핑 우선순위

  1. 사용자 취소 (cancel, 취소, denied, 거부)
  2. 네트워크 에러 (network, timeout, 연결 등)
  3. URL/콜백 에러 (url, scheme, callback, redirect)
  4. 클라이언트 에러 (client, invalid, unauthorized 등)
  5. 토큰 만료 (token, expired, 만료, 세션)
  6. 기본 에러

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,
  );
}