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.
Vincular credenciais de provedores de autenticação a uma conta de usuário
Para vincular credenciais de provedores de autenticação a uma conta de usuário, faça o seguinte:
- Faça login com algum provedor ou método de autenticação.
- Conclua o fluxo de login para o novo provedor de autenticação até
a chamada de um dos métodos
firebase::auth::Auth::SignInWithCredential. Por exemplo, use o token de ID do Google, o token de acesso do Facebook ou o e-mail e a senha. Receba um
Login do Googlefirebase::auth::Credentialpara o novo provedor de autenticação: Login do Facebookfirebase::auth::Credential credential = firebase::auth::GoogleAuthProvider::GetCredential(google_id_token, nullptr);
Login com e-mail/senhafirebase::auth::Credential credential = firebase::auth::FacebookAuthProvider::GetCredential(access_token);
firebase::auth::Credential credential = firebase::auth::EmailAuthProvider::GetCredential(email, password);
Transmita o objeto
firebase::auth::Credentialao métodoLinkWithCredentialdo usuário conectado:// Link the new credential to the currently active user. firebase::auth::User current_user = auth->current_user(); firebase::Future<firebase::auth::AuthResult> result = current_user.LinkWithCredential(credential);
A chamada para
LinkWithCredentialfalhará 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. 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::AuthResult> result = auth->SignInAndRetrieveDataWithCredential(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 for concluída, 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
Uma única conta de usuário do Firebase pode ter vários provedores de autenticação vinculados a ela (por exemplo, e-mail/senha, Google, Facebook), o que permite que o usuário faça login na mesma conta do Firebase por diferentes métodos.
Se você desvincular um provedor de autenticação da conta de um usuário, ele não poderá mais fazer login com esse provedor.
Para desvincular um provedor de autenticação de uma conta de usuário, transmita o ID dele ao método Unlink. Se quiser receber os códigos dos provedores de autenticação vinculados a um usuário, chame ProviderData.
// Unlink the sign-in provider from the currently active user. firebase::auth::User current_user = auth->current_user(); firebase::Future<firebase::auth::AuthResult> result = current_user.Unlink(providerId);
Solução de problemas
Se você encontrar erros ao tentar vincular várias contas, consulte a documentação sobre endereços de e-mail verificados.