Vincule vários provedores de autenticação a uma conta no Unity

Você pode permitir que os usuários façam login no seu aplicativo usando vários provedores de autenticação vinculando as credenciais do provedor de autenticação a uma conta de usuário existente. Os usuários são identificáveis ​​pelo mesmo ID de usuário do Firebase, independentemente do provedor de autenticação usado para fazer login. Por exemplo, um usuário que fez login com uma senha pode vincular uma conta do Google e fazer login com qualquer um dos métodos no futuro. Ou um usuário anônimo pode vincular uma conta do Facebook e, posteriormente, fazer login no Facebook para continuar usando seu aplicativo.

Antes de você começar

Adicione suporte para dois ou mais provedores de autenticação (possivelmente incluindo autenticação anônima) ao seu aplicativo.

A classe FirebaseAuth é o gateway para todas as chamadas de API. É acessível por meio de FirebaseAuth.DefaultInstance .
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

Para vincular credenciais do provedor de autenticação a uma conta de usuário existente:

  1. Faça login do usuário usando qualquer provedor ou método de autenticação.
  2. Conclua o fluxo de login do novo provedor de autenticação até, mas não incluindo, chamar um dos métodos Firebase.Auth.FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync . Por exemplo, obtenha o token de ID do Google, o token de acesso do Facebook ou o e-mail e a senha do usuário.
  3. Obtenha um Firebase.Auth.Credential para o novo provedor de autenticação:

    Login do Google
    Firebase.Auth.Credential credential =
        Firebase.Auth.GoogleAuthProvider.GetCredential(googleIdToken, googleAccessToken);
    
    Login do Facebook
    Firebase.Auth.Credential credential =
        Firebase.Auth.FacebookAuthProvider.GetCredential(accessToken);
    
    Login com senha de e-mail
    Firebase.Auth.Credential credential =
        Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
    
  4. Passe o objeto Firebase.Auth.Credential para o método LinkWithCredentialAsync do usuário conectado:

    auth.CurrentUser.LinkWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("LinkWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("LinkWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("Credentials successfully linked to Firebase user: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });
    

    A chamada para LinkWithCredentialAsync falhará se as credenciais já estiverem vinculadas a outra conta de usuário. Nessa situação, você deve mesclar as contas e os dados associados conforme apropriado para seu aplicativo:

    // Gather data for the currently signed in User.
    string currentUserId = auth.CurrentUser.UserId;
    string currentEmail = auth.CurrentUser.Email;
    string currentDisplayName = auth.CurrentUser.DisplayName;
    System.Uri currentPhotoUrl = auth.CurrentUser.PhotoUrl;
    
    // Sign in with the new credentials.
    auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    
      // TODO: Merge app specific details using the newUser and values from the
      // previous user, saved above.
    });
    

Se a chamada para LinkWithCredentialAsync for bem-sucedida, o usuário poderá fazer login usando qualquer provedor de autenticação vinculado e acessar os mesmos dados do Firebase.

Você pode desvincular um provedor de autenticação de uma conta para que o usuário não possa mais fazer login nesse provedor.

Para desvincular um provedor de autenticação de uma conta de usuário, passe o ID do provedor para o método UnlinkAsync . Você pode obter os IDs dos provedores de autenticação vinculados a um usuário chamando ProviderData .

// Unlink the sign-in provider from the currently active user.
// providerIdString is a string identifying a provider,
// retrieved via FirebaseAuth.FetchProvidersForEmail().
auth.CurrentUser.UnlinkAsync(providerIdString).ContinueWith(task => {
  if (task.IsCanceled) {
    Debug.LogError("UnlinkAsync was canceled.");
    return;
  }
  if (task.IsFaulted) {
    Debug.LogError("UnlinkAsync encountered an error: " + task.Exception);
    return;
  }

  // The user has been unlinked from the provider.
  Firebase.Auth.AuthResult result = task.Result;
  Debug.LogFormat("Credentials successfully unlinked from user: {0} ({1})",
      result.User.DisplayName, result.User.UserId);
});