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 и Unity

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

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

Перед тем, как можно использовать Firebase аутентификации , вам необходимо:

  • Зарегистрируйте свой проект 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, выполните следующие действия:

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

    Firebase.Auth.FederatedOAuthProviderData providerData =
      new Firebase.Auth.FederatedOAuthProviderData();
    providerData.ProviderId = Firebase.Auth.YahooAuthProvider.ProviderId;
    
  2. Необязательно: Укажите дополнительные пользовательские параметры 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, объем и состояние.

  3. Необязательно: Укажите дополнительные OAuth 2.0 областей за пределы profile и email , который вы хотите запросить у провайдера аутентификации. Если приложению требуется доступ к приватным данным пользователя от Yahoo API , вы должны запроса разрешений на Yahoo API , в соответствии с 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 SCOPES документации .

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

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

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

<< ../_ includes / _sign_in_with_provider_unity.md >>>

  1. Хотя приведенные выше примеры сосредоточиться на знак в потоках, у вас также есть возможность связывать поставщик 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.SignInResult signInResult = task.Result;
        Firebase.Auth.FirebaseUser user = signInResult.User;
        Debug.LogFormat("User linked successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    
  2. Та же модель может быть использована с 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.SignInResult signInResult = task.Result;
        Firebase.Auth.FirebaseUser user = signInResult.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 Cloud Storage правил безопасности , вы можете получить подписанный в уникальном пользователя идентификатор пользователя из auth переменной и использовать его , чтобы контролировать , какие данные пользователь заходит может.

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

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

auth.SignOut();