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

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 ID do Firebase identifica usuários de qualquer provedor de autenticação. 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.

Para vincular credenciais de provedores 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 signInWith. Por exemplo, use o token de ID do Google, o token de acesso do Facebook ou o e-mail e a senha.

  3. Receba um objeto Credential para o novo provedor de autenticação:

    // Google Sign-in
    final credential = GoogleAuthProvider.credential(idToken: idToken);
    
    // Email and password sign-in
    final credential =
        EmailAuthProvider.credential(email: emailAddress, password: password);
    
    // Etc.
    
  4. Passe o objeto Credential para o método linkWithCredential() do usuário que fez login:

    try {
      final userCredential = await FirebaseAuth.instance.currentUser
          ?.linkWithCredential(credential);
    } on FirebaseAuthException catch (e) {
      switch (e.code) {
        case "provider-already-linked":
          print("The provider has already been linked to the user.");
          break;
        case "invalid-credential":
          print("The provider's credential is not valid.");
          break;
        case "credential-already-in-use":
          print("The account corresponding to the credential already exists, "
              "or is already linked to a Firebase User.");
          break;
        // See the API reference for the full list of error codes.
        default:
          print("Unknown error.");
      }
      ```
    

Se a chamada para linkWithCredential() for concluída, o usuário poderá fazer login com um dos provedores de autenticação vinculados e acessar os dados do Firebase.

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

Para desvincular um provedor de autenticação de uma conta de usuário, transmita o ID dele ao método unlink(). Consiga esses IDs dos provedores de autenticação vinculados a um usuário usando a propriedade providerData do objeto User.

try {
  await FirebaseAuth.instance.currentUser?.unlink(providerId);
} on FirebaseAuthException catch (e) {
  switch (e.code) {
    case "no-such-provider":
      print("The user isn't linked to the provider or the provider "
          "doesn't exist.");
      break;
    default:
      print("Unkown error.");
  }
}