Google is committed to advancing racial equity for Black communities. See how.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

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

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

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

  1. Добавьте Firebase в свой проект C ++ .
  2. build.gradle , что в build.gradle файле build.gradle уровне проекта build.gradle репозиторий Google Maven как в buildscript и в разделы allprojects .
  3. В консоли Firebase откройте раздел Auth .
  4. На вкладке Метод входа включите поставщика Yahoo .
  5. Добавьте Client ID и Client Secret из консоли разработчика этого провайдера в конфигурацию провайдера:
    1. Чтобы зарегистрировать клиент Yahoo OAuth, следуйте документации разработчика Yahoo по регистрации веб-приложения в Yahoo .

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

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

Доступ к классу 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::auth::Auth для своего firebase::App . Между App и Auth однозначное соответствие.
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    

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

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

  1. Создайте экземпляр FederatedOAuthProviderData настроенный с идентификатором поставщика, подходящим для 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 , scope и state .

  3. Необязательно : укажите дополнительные области OAuth 2.0 помимо profile и email которые вы хотите запросить у поставщика аутентификации. Если вашему приложению требуется доступ к частным пользовательским данным из Yahoo API, вам необходимо запросить разрешения для Yahoo API в разделе Разрешения API в консоли разработчика Yahoo. Запрошенные области OAuth должны точно совпадать с предварительно настроенными в разрешениях API приложения. Например, если доступ для чтения / записи запрашивается для контактов пользователя и предварительно настроен в разрешениях API приложения, необходимо sdct-w вместо sdct-r области 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);
    

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

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

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

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

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

  • В своих приложениях вы можете получить основную информацию профиля firebase::auth::User объекта 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 Realtime и правилах безопасности облачного хранилища вы можете получить уникальный идентификатор пользователя вошедшего в систему из переменной auth и использовать его для управления данными, к которым пользователь может получить доступ.

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

Чтобы выйти из системы, вызовите SignOut() :

auth->SignOut();