Вы можете разрешить своим пользователям аутентифицироваться в Firebase с помощью поставщиков OAuth, таких как Yahoo, интегрировав общий веб-логин OAuth в свое приложение с помощью Firebase SDK для выполнения сквозного процесса входа. Поскольку этот процесс требует использования SDK Firebase для телефона, он поддерживается только на платформах Android и Apple.
Прежде чем начать
Прежде чем вы сможете использовать Firebase Authentication , вам необходимо:
Зарегистрируйте свой проект Unity и настройте его для использования Firebase.
Если ваш проект Unity уже использует Firebase, значит, он уже зарегистрирован и настроен для Firebase.
Если у вас нет проекта Unity, вы можете скачать образец приложения .
Добавьте Firebase Unity SDK (в частности,
FirebaseAuth.unitypackage
) в свой проект Unity.
Обратите внимание, что добавление Firebase в ваш проект Unity включает в себя задачи как в консоли Firebase , так и в вашем открытом проекте Unity (например, вы загружаете файлы конфигурации Firebase из консоли, а затем перемещаете их в свой проект Unity).
Доступ к классу Firebase.Auth.FirebaseAuth
.
Класс FirebaseAuth
является шлюзом для всех вызовов API. Он доступен через FirebaseAuth.DefaultInstance .Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
Управляйте процессом входа в систему с помощью Firebase SDK
Чтобы обработать процесс входа с помощью Firebase SDK, выполните следующие действия:
Создайте экземпляр
FederatedOAuthProviderData
, настроенный с идентификатором поставщика, подходящим для Yahoo.Firebase.Auth.FederatedOAuthProviderData providerData = new Firebase.Auth.FederatedOAuthProviderData(); providerData.ProviderId = Firebase.Auth.YahooAuthProvider.ProviderId;
Необязательно : укажите дополнительные пользовательские параметры OAuth, которые вы хотите отправить с запросом OAuth.
providerData.CustomParameters = new Dictionary<string,string>; // Prompt user to re-authenticate to Yahoo. providerData.CustomParameters.Add("prompt", "login"); // Localize to French. providerData.CustomParameters.Add("language", "fr");
Параметры, которые поддерживает Yahoo, см. в документации Yahoo OAuth . Обратите внимание, что вы не можете передавать параметры, необходимые для Firebase, с помощью
custom_parameters()
. Этими параметрами являются client_id , redirect_uri , response_type , область действия и состояние .Необязательно : укажите дополнительные области OAuth 2.0 помимо
profile
иemail
, которые вы хотите запросить у поставщика аутентификации. Если вашему приложению требуется доступ к частным данным пользователя из API Yahoo, вам необходимо запросить разрешения для API Yahoo в разделе «Разрешения API» в консоли разработчика Yahoo. Запрошенные области OAuth должны точно соответствовать предварительно настроенным в разрешениях API приложения. Например, если доступ для чтения и записи запрашивается для контактов пользователя и предварительно настроен в разрешениях API приложения, необходимо передатьsdct-w
вместо области OAuth только для чтенияsdct-r
. В противном случае поток завершится неудачно, и конечному пользователю будет показана ошибка.providerData.Scopes = new List<string>(); // Request access to Yahoo Mail API. providerData.Scopes.Add("mail-r"); // This must be preconfigured in the app's API permissions. providerData.Scopes.Add("sdct-w");
Чтобы узнать больше, обратитесь к документации по областям Yahoo .
После настройки данных вашего поставщика используйте их для создания FederatedOAuthProvider.
// Construct a FederatedOAuthProvider for use in Auth methods. Firebase.Auth.FederatedOAuthProvider provider = new Firebase.Auth.FederatedOAuthProvider(); provider.SetProviderData(providerData);
Аутентификация с помощью Firebase с использованием объекта провайдера Auth. Обратите внимание, что в отличие от других операций FirebaseAuth, эта операция возьмет на себя управление вашим пользовательским интерфейсом, открыв веб-представление, в котором пользователь может ввести свои учетные данные.
Чтобы начать процесс входа, вызовите
SignInAndRetrieveDataWithCredentialAsync
:
<<../_includes/_sign_in_with_provider_unity.md>>>
Хотя приведенные выше примеры посвящены потокам входа в систему, у вас также есть возможность связать поставщика Yahoo с существующим пользователем с помощью
LinkWithProviderAsync
. Например, вы можете связать несколько поставщиков с одним и тем же пользователем, позволяя им входить в систему с любым из них.user.LinkWithProviderAsync(provider).ContinueOnMainThread(task => { if (task.IsCanceled) { Debug.LogError("LinkWithProviderAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("LinkWithProviderAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult authResult = task.Result; Firebase.Auth.FirebaseUser user = authResult.User; Debug.LogFormat("User linked successfully: {0} ({1})", user.DisplayName, user.UserId); });
Тот же шаблон можно использовать с
ReauthenticateWithProviderAsync
, который можно использовать для получения новых учетных данных для конфиденциальных операций, требующих недавнего входа в систему.user.ReauthenticateWithProviderAsync(provider).ContinueOnMainThread(task => { if (task.IsCanceled) { Debug.LogError("ReauthenticateWithProviderAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError( "ReauthenticateWithProviderAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult authResult = task.Result; Firebase.Auth.FirebaseUser user = authResult.User; Debug.LogFormat("User reauthenticated successfully: {0} ({1})", user.DisplayName, user.UserId); });
Следующие шаги
После того, как пользователь входит в систему в первый раз, создается новая учетная запись пользователя, которая связывается с учетными данными (то есть именем пользователя и паролем, номером телефона или информацией поставщика аутентификации), с которыми пользователь вошел в систему. Эта новая учетная запись хранится как часть вашего проекта Firebase и может использоваться для идентификации пользователя в каждом приложении вашего проекта, независимо от того, как пользователь входит в систему.
В ваших приложениях вы можете получить базовую информацию профиля пользователя из объекта
Firebase.Auth.FirebaseUser
:Firebase.Auth.FirebaseUser user = auth.CurrentUser; if (user != null) { string name = user.DisplayName; string email = user.Email; System.Uri photo_url = user.PhotoUrl; // 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 User.TokenAsync() instead. string uid = user.UserId; }
В правилах безопасности Firebase Realtime Database и Cloud Storage Firebase вы можете получить уникальный идентификатор пользователя, вошедшего в систему, из переменной
auth
и использовать его для управления тем, к каким данным пользователь может получить доступ.
Вы можете разрешить пользователям входить в ваше приложение с использованием нескольких поставщиков аутентификации , связав учетные данные поставщика аутентификации с существующей учетной записью пользователя.
Чтобы выйти из системы, вызовите SignOut()
:
auth.SignOut();