Обработка ошибок

Ошибки могут возникать на разных уровнях. Вы можете получить уведомление разными способами в зависимости от того, где произошла ошибка.

Отсутствуют обязательные параметры OAuth

Если вы забудете установить необходимые параметры OAuth, такие как client_id или область действия, вы увидите сообщение об ошибке, как показано ниже, в консоли JavaScript вашего браузера.

Ошибки консоли JavaScript

Исправить ошибки конфигурации OAuth

Для устранения некоторых ошибок могут потребоваться изменения в консоли API Google .

Неверные значения параметров OAuth

Если вы зададите недопустимые значения для параметров OAuth, например неверный идентификатор клиента, идентификаторы области или значения типа ответа, вы увидите страницу с ошибкой OAuth.

Ошибки OAuth

Ответы об ошибках OAuth

OAuth может вернуть ответ об ошибке, и в этом случае ваша функция callback будет запущена с ответом об ошибке в качестве параметра. Ниже приведен пример ответа об ошибке OAuth.

  {
    "error":"access_denied"
  }

Некоторые примеры перечислены ниже.

  1. Пользователь отклоняет запрос OAuth.
  2. Для запроса OAuth с параметром prompt=none пользователь еще не прошел аутентификацию и не имеет предварительно настроенного согласия для запрошенных областей.

В приведенном ниже примере показано, как обрабатывать ответы OAuth об успехе и ошибке.

function myCallback(response) {
  if (response.error) {
    // Handle error response
    ... ...
  } else if (response.code) {
    // Handle success code response
    ... ...
  }
}

Ошибки, не связанные с OAuth

OAuth не определяет поведение, когда:

  1. всплывающее окно не открывается.
  2. всплывающее окно закрывается до того, как будет возвращен ответ OAuth.

Эта библиотека фиксирует эти ошибки и запускает error_callback , если он установлен. Обязательно проверьте тип ошибки, как показано ниже. В противном случае логика вашего кода может быть затронута, когда эта библиотека позже будет поддерживать новые типы ошибок.

function myErrorCallback(err) {
  if (err.type == 'popup_failed_to_open') {
    // The popup window is failed to open
    ... ...
  } else if (err.type == 'popup_closed') {
    // The popup window is closed before an OAuth response is returned
    ... ...
  }
}

const client = google.accounts.oauth2.initCodeClient({
  client_id: 'YOUR_GOOGLE_CLIENT_ID',
  scope: 'https://www.googleapis.com/auth/calendar.readonly',
  ux_mode: 'popup',
  callback: myCallback,
  error_callback: myErrorCallback
});