Вы можете позволить своим пользователям аутентифицироваться в Firebase с помощью поставщиков OAuth, таких как Yahoo, интегрировав универсальный веб-вход OAuth в свое приложение с помощью Firebase SDK для выполнения сквозного процесса входа. Поскольку этот поток требует использования пакетов SDK Firebase для телефона, он поддерживается только на платформах Android и Apple.
Прежде чем вы начнете
- Добавьте Firebase в свой проект C++ .
- В консоли Firebase откройте раздел Auth .
- На вкладке Способ входа включите поставщика Yahoo .
- Добавьте идентификатор клиента и секрет клиента из консоли разработчика этого провайдера в конфигурацию провайдера:
Чтобы зарегистрировать клиент Yahoo OAuth, следуйте документации разработчика Yahoo по регистрации веб-приложения в Yahoo .
Обязательно выберите два разрешения OpenID Connect API:
profile
иemail
.- При регистрации приложений у этих поставщиков обязательно зарегистрируйте домен
*.firebaseapp.com
для своего проекта в качестве домена перенаправления для вашего приложения.
- Нажмите Сохранить .
Доступ к классу firebase::auth::Auth
Класс Auth
является шлюзом для всех вызовов API.- Добавьте файлы заголовков Auth и App:
#include "firebase/app.h" #include "firebase/auth.h"
- В коде инициализации создайте класс
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__)
- Получите класс
firebase::auth::Auth
для вашегоfirebase::App
. МеждуApp
иAuth
существует однозначное соответствие.firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
Обработка процесса входа с помощью Firebase SDK
Чтобы обработать процесс входа с помощью Firebase SDK, выполните следующие действия:
Создайте экземпляр
FederatedOAuthProviderData
, настроенный с идентификатором поставщика, подходящим для Yahoo.firebase::auth::FederatedOAuthProviderData provider_data(firebase::auth::YahooAuthProvider::kProviderId);
Необязательно : укажите дополнительные настраиваемые параметры 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 .Необязательно : укажите дополнительные области действия OAuth 2.0 помимо
profile
иemail
, которые вы хотите запросить у поставщика проверки подлинности. Если вашему приложению требуется доступ к личным данным пользователя из API-интерфейсов Yahoo, вам потребуется запросить разрешения для API-интерфейсов Yahoo в разделе «Разрешения 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 .
После настройки данных поставщика используйте их для создания FederatedOAuthProvider.
// Construct a FederatedOAuthProvider for use in Auth methods. firebase::auth::FederatedOAuthProvider provider(provider_data);
Выполните аутентификацию в Firebase, используя объект поставщика аутентификации. Обратите внимание, что в отличие от других операций FirebaseAuth, эта операция возьмет на себя управление вашим пользовательским интерфейсом, открыв веб-представление, в котором пользователь может ввести свои учетные данные.
Чтобы запустить процесс входа, вызовите
SignInWithProvider
:firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithProvider(provider_data);
Затем ваше приложение может ожидать или зарегистрировать обратный вызов на Future .
Хотя в приведенных выше примерах основное внимание уделяется потокам входа, у вас также есть возможность связать поставщика Yahoo с существующим пользователем с помощью
LinkWithProvider
. Например, вы можете связать нескольких провайдеров с одним и тем же пользователем, позволяя им входить в систему с помощью любого из них.firebase::Future<firebase::auth::AuthResult> result = user.LinkWithProvider(provider_data);
Тот же шаблон можно использовать с
ReauthenticateWithProvider
, который можно использовать для получения новых учетных данных для конфиденциальных операций, требующих недавнего входа в систему.firebase::Future<firebase::auth::AuthResult> result = user.ReauthenticateWithProvider(provider_data);
Затем ваше приложение может ожидать или зарегистрировать обратный вызов на Future .
Следующие шаги
После того, как пользователь входит в систему в первый раз, создается новая учетная запись пользователя и связывается с учетными данными, т. е. с именем пользователя и паролем, номером телефона или информацией о поставщике проверки подлинности, с которыми пользователь вошел в систему. Эта новая учетная запись хранится как часть вашего проекта Firebase и может использоваться для идентификации пользователя во всех приложениях вашего проекта, независимо от того, как пользователь входит в систему.
В ваших приложениях вы можете получить основную информацию о профиле пользователя из объекта
firebase::auth::User
:firebase::auth::User user = auth->current_user(); if (user.is_valid()) { 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();