Google 致力于为黑人社区推动种族平等。查看具体举措

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

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

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

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

  1. Добавить Firebase в свой Android проекта .

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

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

    2. При регистрации приложения с этими поставщиками, обязательно зарегистрировать *.firebaseapp.com домена для вашего проекта в области перенаправления для вашего приложения.
  5. Нажмите кнопку Сохранить.
  6. Если вы еще не указаны ваше приложение SHA-1 отпечаток пальца, сделайте это с страницы Настройки консоли Firebase. Обратитесь к аутентификации своему клиента Подробных сведений о том , как получить свое приложение SHA-1 отпечаток палец.

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

Если вы создаете приложение для Android, самый простой способ аутентифицировать своих пользователей с помощью Firebase с использованием их учетных записей Yahoo - это обработать весь процесс входа с помощью Firebase Android SDK.

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

  1. Построить экземпляр OAuthProvider с использованием своего Builder с провайдером ID yahoo.com.

    OAuthProvider.Builder provider = OAuthProvider.newBuilder("yahoo.com");
    
  2. Необязательно: Укажите дополнительные пользовательские параметры OAuth , которые вы хотите отправить с запросом OAuth.

    // Prompt user to re-authenticate to Yahoo.
    provider.addCustomParameter("prompt", "login");
    
    // Localize to French.
    provider.addCustomParameter("language", "fr");
    

    Для опоров параметров Yahoo см документации Yahoo OAuth . Обратите внимание , что вы не можете передать Firebase-необходимые параметры с setCustomParameters() . Эти параметры являются 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 . В противном случае поток завершится неудачно, и конечному пользователю будет показана ошибка.

    List<String> scopes =
        new ArrayList<String>() {
          {
            // Request access to Yahoo Mail API.
            add("mail-r");
            // This must be preconfigured in the app's API permissions.
            add("sdct-w");
          }
        };
    provider.setScopes(scopes);
    

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

  4. Выполните аутентификацию с помощью Firebase с помощью объекта поставщика OAuth. Обратите внимание , что в отличие от других операций FirebaseAuth, это взять под контроль своего UI, выскакивает настраиваемую вкладку Chrome . В результате не ссылайтесь на свою Activity в OnSuccessListeners и OnFailureListeners, которые вы присоединяете, поскольку они немедленно отключаются, когда операция запускает пользовательский интерфейс.

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

    Для того, чтобы проверить, есть ли в ожидании результата, вызовите getPendingAuthResult :

    FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
    Task<AuthResult> pendingResultTask = firebaseAuth.getPendingAuthResult();
    if (pendingResultTask != null) {
      // There's something already here! Finish the sign-in for your user.
      pendingResultTask
          .addOnSuccessListener(
              new OnSuccessListener<AuthResult>() {
                @Override
                public void onSuccess(AuthResult authResult) {
                  // User is signed in.
                  // IdP data available in
                  // authResult.getAdditionalUserInfo().getProfile().
                  // The OAuth access token can be retrieved:
                  // authResult.getCredential().getAccessToken().
                  // Yahoo OAuth ID token can be retrieved:
                  // authResult.getCredential().getIdToken().
                }
              })
          .addOnFailureListener(
              new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                  // Handle failure.
                }
              });
    } else {
      // There's no pending result so you need to start the sign-in flow.
      // See below.
    }
    

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

    firebaseAuth
        .startActivityForSignInWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // User is signed in.
                // IdP data available in
                // authResult.getAdditionalUserInfo().getProfile().
                // The OAuth access token can be retrieved:
                // authResult.getCredential().getAccessToken().
                // Yahoo OAuth ID token can also be retrieved:
                // authResult.getCredential().getIdToken().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    

    После успешного завершения, доступ OAuth маркер , связанный с провайдером может быть получен из OAuthCredential объекта возвращается.

    Используя маркер доступа OAuth, вы можете позвонить в Yahoo API .

    Где YAHOO_USER_UID это идентификатор пользователя Yahoo , который может быть проанализирован с firebaseAuth.getCurrentUser().getProviderData().get(0).getUid() поле или из authResult.getAdditionalUserInfo().getProfile() .

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

    // The user is already signed-in.
    FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
    
    firebaseUser
        .startActivityForLinkWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // Yahoo credential is linked to the current user.
                // IdP data available in
                // authResult.getAdditionalUserInfo().getProfile().
                // The OAuth access token can be retrieved:
                // authResult.getCredential().getAccessToken().
                // Yahoo OAuth ID token can also be retrieved:
                // authResult.getCredential().getIdToken().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    
  6. Та же модель может быть использована с startActivityForReauthenticateWithProvider , которые могут быть использованы для получения свежих учетных данных для чувствительных операций, требующих последней регистрацию.

    // The user is already signed-in.
    FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
    
    firebaseUser
        .startActivityForReauthenticateWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // User is re-authenticated with fresh tokens and
                // should be able to perform sensitive operations
                // like account deletion and email or password
                // update.
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    

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

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

  • В приложениях, вы можете получить основную информацию о профиле пользователя из FirebaseUser объекта. См Управление пользователей .

  • В вашей базе данных в реальном времени и Firebase Cloud Storage правил безопасности , вы можете получить подписанный в уникальном пользователя идентификатор пользователя из auth переменной и использовать его , чтобы контролировать , какие данные пользователь заходит может.

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

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

Джава

FirebaseAuth.getInstance().signOut();

Котлин + KTX

Firebase.auth.signOut()