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

Ao vincular as credenciais de provedores de autenticação a contas de usuário existentes, você permite que esses usuários façam login no seu app usando diferentes provedores. O código do Firebase identifica usuários de qualquer provedor de login. Por exemplo, um usuário que fez login com uma senha pode vincular uma conta do Google e usar um desses métodos. Ou um usuário anônimo pode vincular uma conta do Facebook para acessar o app.

Antes de começar

No app, adicione suporte a dois ou mais provedores de autenticação, incluindo autenticação anônima.

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

Vincular credenciais de provedor de autenticação a uma conta de usuário

Para vincular credenciais de provedor de autenticação a uma conta de usuário, faça o seguinte:

  1. Faça login com algum provedor ou método de autenticação.
  2. Conclua o fluxo de login para o novo provedor de autenticação até a chamada de um dos métodos Firebase.Auth.FirebaseAuth.SignInWithCredentialAsync, mas sem incluir essa etapa. Por exemplo, use o código do token do Google, o token de acesso do Facebook ou o e-mail e a senha.
  3. Crie uma 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 e-mail/senha
    Firebase.Auth.Credential credential =
        Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
    
  4. Transmita 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.FirebaseUser newUser = task.Result;
      Debug.LogFormat("Credentials successfully linked to Firebase user: {0} ({1})",
          newUser.DisplayName, newUser.UserId);
    });
    

    A chamada ao LinkWithCredentialAsync falhará se as credenciais já estiverem vinculadas a outra conta de usuário. Nesse caso, você precisará mesclar as contas e os dados associados da maneira apropriada para o app:

    // 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.SignInWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.FirebaseUser newUser = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          newUser.DisplayName, newUser.UserId);
    
      // TODO: Merge app specific details using the newUser and values from the
      // previous user, saved above.
    });
    

Se a chamada ao LinkWithCredentialAsync funcionar, o usuário poderá fazer login com um dos provedores de autenticação vinculados e acessar os dados do Firebase.

Desvincular um provedor de autenticação de uma conta de usuário

É possível desvincular um provedor de autenticação de uma conta para que o usuário não possa mais fazer login com ele.

Para desvincular um provedor de uma conta de usuário, transmita o respectivo código para o método UnlinkAsync. É possível receber os códigos dos provedores de autenticação vinculados a um usuário ao chamar 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.FirebaseUser newUser = task.Result;
  Debug.LogFormat("Credentials successfully unlinked from user: {0} ({1})",
      newUser.DisplayName, newUser.UserId);
});

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.