Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Аутентификация с помощью Yahoo и C ++

Вы можете позволить своим пользователям аутентифицироваться с помощью Firebase с помощью провайдеров OAuth, таких как Yahoo, путем интеграции общего веб-входа OAuth в ваше приложение с помощью Firebase SDK для выполнения сквозного потока входа. Поскольку этот поток требует использования телефонных пакетов Firebase SDK, он поддерживается только на Android и iOS.

Прежде чем вы начнете

  1. Добавить Firebase в свой проект C ++ .
  2. В Firebase консоли откройте раздел Auth.
  3. На вкладке Вход в метод, позволяют поставщику Yahoo.
  4. Добавьте идентификатор клиента и секрет клиента от разработчиков консоли, поставщика к конфигурации поставщика:
    1. Для регистрации клиента Yahoo OAuth, следовать разработчик документации по Yahoo регистрации веб - приложения с Yahoo .

      Не забудьте выбрать два разрешения API OpenID Connect: profile и email .

    2. При регистрации приложения с этими поставщиками, обязательно зарегистрировать *.firebaseapp.com домена для вашего проекта в области перенаправления для вашего приложения.
  5. Нажмите кнопку Сохранить.

Доступ к firebase::auth::Auth класс

Auth класс является шлюзом для всех вызовов API.
  1. Добавьте файлы заголовков Auth и App:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. В коде инициализации, создать firebase::App класса.
    #if defined(__ANDROID__)
      firebase::App* app =
          firebase::App::Create(firebase::AppOptions(), my_jni_env, my_activity);
    #else
      firebase::App* app = firebase::App::Create(firebase::AppOptions());
    #endif  // defined(__ANDROID__)
    
  3. Приобретать firebase::auth::Auth класс для вашего firebase::App . Существует отображение один к одному между App и Auth .
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    

Управляйте входом с помощью Firebase SDK

Чтобы обработать входной поток с помощью Firebase SDK, выполните следующие действия:

  1. Построить экземпляр FederatedOAuthProviderData , сконфигурированный с поставщиком ID подходящим для Yahoo.

    firebase::auth::FederatedOAuthProviderData
        provider_data(firebase::auth::YahooAuthProvider::kProviderId);
    
  2. Необязательно: Укажите дополнительные пользовательские параметры OAuth , которые вы хотите отправить с запросом OAuth.

    // Prompt user to re-authenticate to Yahoo.
    provider_data.custom_parameters["prompt"] = "login";
    
    // Localize to French.
    provider_data.custom_parameters["language"] = "fr";
    

    Для опоров параметров Yahoo см документации Yahoo OAuth . Обратите внимание , что вы не можете передать Firebase-необходимые параметры с custom_parameters() . Эти параметры являются client_id, redirect_uri, response_type, объем и состояние.

  3. Необязательно: Укажите дополнительные OAuth 2.0 областей за пределы profile и email , который вы хотите запросить у провайдера аутентификации. Если приложению требуется доступ к приватным данным пользователя от Yahoo API , вы должны запроса разрешений на Yahoo API , в соответствии с API Права доступа в консоли разработчика Yahoo. Запрошенные области OAuth должны точно соответствовать предварительно настроенным в разрешениях API приложения. Например , если, чтения / записи предлагается пользовательских контактов и предварительно сконфигурирован в API разрешений для приложения, sdct-w должен быть передан вместо только для чтения OAuth области видимости sdct-r . В противном случае поток завершится неудачно, и конечному пользователю будет показана ошибка.

    // Request access to Yahoo Mail API.
    provider_data.scopes.push_back("mail-r");
    // This must be preconfigured in the app's API permissions.
    provider_data.scopes.push_back("sdct-w");
    

    Чтобы узнать больше, обратитесь к Yahoo SCOPES документации .

  4. После настройки данных вашего провайдера используйте их для создания FederatedOAuthProvider.

    // Construct a FederatedOAuthProvider for use in Auth methods.
    firebase::auth::FederatedOAuthProvider provider(provider_data);
    
  5. Выполните аутентификацию с помощью Firebase, используя объект поставщика аутентификации. Обратите внимание, что в отличие от других операций FirebaseAuth, эта функция будет управлять вашим пользовательским интерфейсом, открывая веб-представление, в котором пользователь может ввести свои учетные данные.

    Для того, чтобы начать знак в потоке, вызовите signInWithProvider :

    firebase::Future<firebase::auth::SignInResult> result =
      auth->SignInWithProvider(provider_data);
    

    Ваше приложение может затем ждать или зарегистрировать обратный вызов на будущее .

  6. Хотя приведенные выше примеры сосредоточиться на знак в потоках, у вас также есть возможность связывать поставщик Yahoo существующего пользователю с помощью LinkWithProvider . Например, вы можете связать нескольких поставщиков с одним и тем же пользователем, позволяя им входить в систему с любым из них.

    firebase::Future<firebase::auth::SignInResult> result = user->LinkWithProvider(provider_data);
    
  7. Та же модель может быть использована с ReauthenticateWithProvider , которые могут быть использованы для получения свежих учетных данных для чувствительных операций, требующих последней регистрацию.

    firebase::Future<firebase::auth::SignInResult> result =
      user->ReauthenticateWithProvider(provider_data);
    

    Ваше приложение может затем ждать или зарегистрировать обратный вызов на будущее .

Следующие шаги

После того, как пользователь входит в систему в первый раз, создается новая учетная запись пользователя, связанная с учетными данными, то есть с именем пользователя и паролем, номером телефона или информацией о провайдере аутентификации, с которыми пользователь вошел в систему. Эта новая учетная запись хранится как часть вашего проекта Firebase и может использоваться для идентификации пользователя в каждом приложении в вашем проекте, независимо от того, как пользователь входит в систему.

  • В приложениях, вы можете получить основную информацию о профиле пользователя из firebase::auth::User объекта:

    firebase::auth::User* user = auth->current_user();
    if (user != nullptr) {
      std::string name = user->display_name();
      std::string email = user->email();
      std::string photo_url = user->photo_url();
      // The user's ID, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server,
      // if you have one. Use firebase::auth::User::Token() instead.
      std::string uid = user->uid();
    }
    
  • В вашей базе данных в реальном времени и Firebase Cloud Storage правил безопасности , вы можете получить подписанный в уникальном пользователя идентификатор пользователя из auth переменной и использовать его , чтобы контролировать , какие данные пользователь заходит может.

Вы можете позволить пользователям входить в ваше приложение с помощью нескольких поставщиков проверки подлинности с помощью ссылки AUTH учетных данных поставщика к существующему учетной записи пользователя.

Чтобы выйти пользователь, вызовите SignOut() :

auth->SignOut();