Criar um usuário
Para criar um usuário no projeto do Firebase, chame o método
CreateUserWithEmailAndPassword
ou use um provedor de identidade
federado, como o Login do Google ou
do Facebook, para fazer o login do usuário pela primeira vez.
Também é possível criar novos usuários autenticados por senha na seção "Autenticação" do Console do Firebase, na página "Usuários".
Identificar o usuário conectado
A prática recomendada de identificação do usuário atual é definir um listener no objeto Auth:
class MyAuthStateListener : public firebase::auth::AuthStateListener { public: void OnAuthStateChanged(firebase::auth::Auth* auth) override { firebase::auth::User user = auth->current_user(); if (user.is_valid()) { // User is signed in printf("OnAuthStateChanged: signed_in %s\n", user.uid().c_str()); } else { // User is signed out printf("OnAuthStateChanged: signed_out\n"); } // ... } }; // ... initialization code // Test notification on registration. MyAuthStateListener state_change_listener; auth->AddAuthStateListener(&state_change_listener);
Com um listener, você garante que o objeto Auth não esteja em um estado intermediário (como na inicialização) ao receber o usuário atual.
Chamar current_user
também permite identificar o usuário conectado no momento. Se um usuário não estiver conectado, o método is_valid
dele vai retornar a resposta "falso".
Manter a credencial de um usuário
As credenciais do usuário serão armazenadas no keystore local depois que um usuário fizer login. O cache local de credenciais de usuário pode ser excluído ao desconectar o usuário. O keystore é específico da plataforma:
- Plataformas Apple: Serviços de conjuntos de chaves (em inglês).
- Android: Android Keystore.
- Windows: API de gerenciamento de credenciais (em inglês).
- OS X: Serviços de conjuntos de chaves (em inglês).
- Linux: libsecret, que o usuário precisa instalar.
Receber o perfil de um usuário
Para coletar informações do perfil de um usuário, use os métodos de acesso de uma instância do firebase::auth::User
. Por exemplo:
firebase::auth::User user = auth->current_user(); if (user.is_valid()) { std::string name = user.display_name(); std::string email = user.email(); std::string photo_url = user.photo_url(); // The user's ID, unique to the Firebase project. // Do NOT use this value to authenticate with your backend server, // if you have one. Use firebase::auth::User::Token() instead. std::string uid = user.uid(); }
Receber informações específicas de provedor do perfil de um usuário
Para acessar informações de perfil recuperadas dos provedores de login vinculados a um usuário, use o método ProviderData
. Por exemplo:
firebase::auth::User user = auth->current_user(); if (user.is_valid()) { for (auto it = user.provider_data().begin(); it != user.provider_data().end(); ++it) { firebase::auth::UserInfoInterface profile = *it; // Id of the provider (ex: google.com) std::string providerId = profile.provider_id(); // UID specific to the provider std::string uid = profile.uid(); // Name, email address, and profile photo Url std::string name = profile.display_name(); std::string email = profile.email(); std::string photoUrl = profile.photo_url(); } }
Atualizar o perfil de um usuário
É possível atualizar as informações básicas do perfil de um usuário, como o nome de exibição
e o URL da foto do perfil dele, com o método UpdateUserProfile
. Por exemplo:
firebase::auth::User user = auth->current_user(); if (user.is_valid()) { firebase::auth::User::UserProfile profile; profile.display_name = "Jane Q. User"; profile.photo_url = "https://example.com/jane-q-user/profile.jpg"; user.UpdateUserProfile(profile).OnCompletion( [](const firebase::Future<void>& completed_future, void* user_data) { // We are probably in a different thread right now. if (completed_future.error() == 0) { printf("User profile updated."); } }, nullptr); // pass user_data here. }
Definir o endereço de e-mail de um usuário
É possível definir o endereço de e-mail de um usuário com o método UpdateEmail
. Por exemplo:
firebase::auth::User user = auth->current_user(); if (user.is_valid()) { user.UpdateEmail("user@example.com") .OnCompletion( [](const firebase::Future<void>& completed_future, void* user_data) { // We are probably in a different thread right now. if (completed_future.error() == 0) { printf("User email address updated."); } }, nullptr); }
Enviar um e-mail de verificação a um usuário
Envie um e-mail de verificação de endereço a um usuário com o
método SendEmailVerification
. Por exemplo:
firebase::auth::User user = auth->current_user(); if (user.is_valid()) { user.SendEmailVerification().OnCompletion( [](const firebase::Future<void>& completed_future, void* user_data) { // We are probably in a different thread right now. if (completed_future.error() == 0) { printf("Email sent."); } }, nullptr); }
É possível personalizar o modelo de e-mail usado na seção "Autenticação" do Console do Firebase na página "Modelos de e-mail". Consulte Modelos de e-mail na Central de Ajuda do Firebase.
Definir a senha de um usuário
Defina a senha de um usuário com o método UpdatePassword
. Por exemplo:
firebase::auth::User user = auth->current_user(); std::string newPassword = "SOME-SECURE-PASSWORD"; if (user.is_valid()) { user.UpdatePassword(newPassword.c_str()) .OnCompletion( [](const firebase::Future<void>& completed_future, void* user_data) { // We are probably in a different thread right now. if (completed_future.error() == 0) { printf("password updated."); } }, nullptr); }
Enviar um e-mail de redefinição de senha
Envie um e-mail de redefinição de senha a um usuário com o método
SendPasswordResetEmail
. Por exemplo:
std::string emailAddress = "user@example.com"; auth->SendPasswordResetEmail(emailAddress.c_str()) .OnCompletion( [](const firebase::Future<void>& completed_future, void* user_data) { // We are probably in a different thread right now. if (completed_future.error() == 0) { // Email sent. } else { // An error happened. printf("Error %d: %s", completed_future.error(), completed_future.error_message()); } }, nullptr);
É possível personalizar o modelo de e-mail usado na seção "Autenticação" do Console do Firebase na página "Modelos de e-mail". Consulte Modelos de e-mail na Central de Ajuda do Firebase.
Você também pode enviar e-mails de redefinição de senha pelo Console do Firebase.
Excluir um usuário
Exclua uma conta de usuário com o método Delete
. Por exemplo:
firebase::auth::User user = auth->current_user(); if (user.is_valid()) { user.Delete().OnCompletion( [](const firebase::Future<void>& completed_future, void* user_data) { if (completed_future.error() == 0) { // User deleted. } else { // An error happened. printf("Error %d: %s", completed_future.error(), completed_future.error_message()); } }, nullptr); }
Também é possível excluir usuários na seção "Autenticação" do console do Firebase, na página "Usuários".
Reautenticar um usuário
Algumas ações que apresentam riscos à segurança, como excluir uma conta, definir um endereço de e-mail principal e alterar uma senha, exigem que o usuário tenha feito login recentemente. Se você realizar uma dessas ações e o último login for muito antigo, a ação falhará.
Quando isso acontecer, autentique o usuário novamente gerando novas credenciais de login e enviando-as para Reauthenticate
. Por exemplo:
firebase::auth::User user = auth->current_user(); // Get auth credentials from the user for re-authentication. The example // below shows email and password credentials but there are multiple // possible providers, such as GoogleAuthProvider or FacebookAuthProvider. firebase::auth::Credential credential = firebase::auth::EmailAuthProvider::GetCredential("user@example.com", "password1234"); if (user.is_valid()) { user.Reauthenticate(credential) .OnCompletion( [](const firebase::Future<void>& completed_future, void* user_data) { if (completed_future.error() == 0) { printf("User re-authenticated."); } }, nullptr); }
Importar contas de usuário
Use o comando auth:import
da CLI do Firebase para importar contas de usuário de um
arquivo para o projeto do Firebase. Por exemplo:
firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14