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

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.

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 usando qualquer provedor ou método de autenticação.
  2. Conclua o fluxo de login do novo provedor de autenticação até a chamada de um dos métodos firebase::auth::Auth::SignInWithCredential, sem realizar essa etapa. Por exemplo, obtenha o token do código do Google do usuário, o token de acesso do Facebook ou o e-mail e a senha.
  3. Selecione um firebase::auth::Credential para o novo membro.

    Login do Google
    firebase::auth::Credential credential =
        firebase::auth::GoogleAuthProvider::GetCredential(google_id_token,
                                                          nullptr);
    
    Login do Facebook
    firebase::auth::Credential credential =
        firebase::auth::FacebookAuthProvider::GetCredential(access_token);
    
    Login com e-mail/senha
    firebase::auth::Credential credential =
        firebase::auth::EmailAuthProvider::GetCredential(email, password);
    
  4. Passe o objeto firebase::auth::Credential ao método LinkWithCredential do usuário conectado:

    // Link the new credential to the currently active user.
    firebase::auth::User* current_user = auth->current_user();
    firebase::Future<firebase::auth::User*> result =
        current_user->LinkWithCredential(credential);
    

    A chamada para LinkWithCredential 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 aplicativo:

    // Gather data for the currently signed in User.
    firebase::auth::User* current_user = auth->current_user();
    std::string current_email = current_user->email();
    std::string current_provider_id = current_user->provider_id();
    std::string current_display_name = current_user->display_name();
    std::string current_photo_url = current_user->photo_url();
    
    // Sign in with the new credentials.
    firebase::Future<firebase::auth::User*> result =
        auth->SignInWithCredential(credential);
    
    // To keep example simple, wait on the current thread until call completes.
    while (result.status() == firebase::kFutureStatusPending) {
      Wait(100);
    }
    
    // The new User is now active.
    if (result.error() == firebase::auth::kAuthErrorNone) {
      firebase::auth::User* new_user = *result.result();
    
      // Merge new_user with the user in details.
      // ...
      (void)new_user;
    }
    

Se a chamada para LinkWithCredential tiver sucesso, o usuário poderá fazer login usando qualquer um dos provedores de autenticação vinculados e acessar os mesmos 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 usando esse provedor.

Para desvincular um provedor de autenticação de uma conta de usuário, transmita o código do provedor para o método Unlink. É possível receber os códigos dos provedores de autenticação vinculados a um usuário. Para isso, basta chamar ProviderData.

// Unlink the sign-in provider from the currently active user.
firebase::auth::User* current_user = auth->current_user();
firebase::Future<firebase::auth::User*> result =
    current_user->Unlink(providerId);

Enviar comentários sobre…

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