Crie um usuário
Você cria um novo usuário no seu projeto do Firebase chamando o método CreateUserWithEmailAndPassword
ou fazendo login em um usuário pela primeira vez usando um provedor de identidade federado, como Google Sign-In ou Facebook Login .
Você também pode criar novos usuários autenticados por senha na seção Autenticação do console do Firebase , na página Usuários.
Obtenha o usuário atualmente conectado
A maneira recomendada de obter o usuário atual é definindo um ouvinte 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);
Ao usar um ouvinte, você garante que o objeto Auth não esteja em um estado intermediário — como inicialização — ao obter o usuário atual.
Você também pode obter o usuário conectado no momento chamando current_user
. Se um usuário não estiver conectado, o método is_valid
do usuário retornará false.
Persistir a credencial de um usuário
As credenciais do usuário serão armazenadas no keystore local após o login do usuário. O cache local de credenciais do usuário pode ser excluído desconectando o usuário. O keystore é específico da plataforma:
- Plataformas Apple: Serviços de chaveiro .
- Android: armazenamento de chaves do Android .
- Windows: API de gerenciamento de credenciais .
- OS X: Serviços de chaveiro .
- Linux: libsecret , que o usuário deve ter instalado.
Obtenha o perfil de um usuário
Para obter informações de perfil de um usuário, use os métodos de acesso de uma instância de 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();
}
Obtenha informações de perfil específicas do provedor de um usuário
Para obter as 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
Você pode atualizar as informações básicas do perfil de um usuário (o nome de exibição do usuário e o URL da foto do perfil) 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
Você pode 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
Você pode enviar um email de verificação de endereço para 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);
}
Você pode 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 uma senha de usuário
Você pode definir uma senha de 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);
}
Envie um e-mail de redefinição de senha
Você pode enviar um email de redefinição de senha para 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);
Você pode 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 do console do Firebase.
Excluir um usuário
Você pode excluir 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);
}
Você também pode excluir usuários da seção Autenticação do console do Firebase , na página Usuários.
Reautenticar um usuário
Algumas ações sensíveis à 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 usuário tiver feito login há muito tempo, o a ação falha.
Quando isso acontecer, autentique novamente o usuário obtendo novas credenciais de login do usuário e passando-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
Você pode importar contas de usuário de um arquivo para seu projeto do Firebase usando o comando auth:import
da CLI do Firebase. Por exemplo:
firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14