É possível usar o Firebase Authentication para permitir que seus usuários se autentiquem com o Firebase usando os endereços de e-mail e senhas deles e gerenciem as contas baseadas em senha do app.
Antes de começar
Adicione o Firebase ao projeto para Android, caso ainda não tenha feito isso.
- Caso você ainda não tenha conectado o app ao projeto do Firebase, faça isso no Console do Firebase.
- Ative o login com e-mail/senha:
- No Console do Firebase, abra a seção Auth.
- Na guia Método de login, ative o login por E-mail/Senha e clique em Salvar.
No seu arquivo Gradle do módulo (nível do app) (geralmente
<project>/<app-module>/build.gradle.kts
ou<project>/<app-module>/build.gradle
), adicione a dependência da biblioteca do Firebase Authentication para Android. Para gerenciar o controle de versões das bibliotecas, recomendamos usar a BoM do Firebase para Android.Kotlin+KTX
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:32.3.1")) // Add the dependency for the Firebase Authentication library // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth-ktx") }
Com a BoM do Firebase para Android, seu app sempre vai usar versões compatíveis das bibliotecas do Firebase para Android.
(Alternativa) Adicionar dependências das bibliotecas do Firebase sem usar a BoM
Se você preferir não usar a BoM do Firebase, especifique cada versão das bibliotecas do Firebase na linha de dependência correspondente.
Se você usa várias bibliotecas do Firebase no seu app, recomendamos utilizar a BoM para gerenciar as versões delas, porque isso ajuda a garantir a compatibilidade de todas as bibliotecas.
dependencies { // Add the dependency for the Firebase Authentication library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth-ktx:22.1.2") }
Java
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:32.3.1")) // Add the dependency for the Firebase Authentication library // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth") }
Com a BoM do Firebase para Android, seu app sempre vai usar versões compatíveis das bibliotecas do Firebase para Android.
(Alternativa) Adicionar dependências das bibliotecas do Firebase sem usar a BoM
Se você preferir não usar a BoM do Firebase, especifique cada versão das bibliotecas do Firebase na linha de dependência correspondente.
Se você usa várias bibliotecas do Firebase no seu app, recomendamos utilizar a BoM para gerenciar as versões delas, porque isso ajuda a garantir a compatibilidade de todas as bibliotecas.
dependencies { // Add the dependency for the Firebase Authentication library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth:22.1.2") }
Criar uma conta baseada em senha
Para criar uma nova conta de usuário com uma senha, conclua estas etapas na atividade de inscrição do seu aplicativo:
- No método
onCreate
da sua atividade de inscrição, acesse a instância compartilhada do objetoFirebaseAuth
:Kotlin+KTX
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- Ao inicializar sua atividade, verifique se o usuário está conectado no momento:
Kotlin+KTX
public override fun onStart() { super.onStart() // Check if user is signed in (non-null) and update UI accordingly. val currentUser = auth.currentUser if (currentUser != null) { reload() } }
Java
@Override public void onStart() { super.onStart(); // Check if user is signed in (non-null) and update UI accordingly. FirebaseUser currentUser = mAuth.getCurrentUser(); if(currentUser != null){ reload(); } }
- Quando um novo usuário se inscrever usando o formulário do app, conclua as etapas de validação de nova conta exigidas, como verificar se a senha foi digitada corretamente e atende aos requisitos de complexidade.
- Crie uma conta enviando o endereço de e-mail e a senha do novo usuário
para
createUserWithEmailAndPassword
:Kotlin+KTX
auth.createUserWithEmailAndPassword(email, password) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "createUserWithEmail:success") val user = auth.currentUser updateUI(user) } else { // If sign in fails, display a message to the user. Log.w(TAG, "createUserWithEmail:failure", task.exception) Toast.makeText( baseContext, "Authentication failed.", Toast.LENGTH_SHORT, ).show() updateUI(null) } }
Java
mAuth.createUserWithEmailAndPassword(email, password) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "createUserWithEmail:success"); FirebaseUser user = mAuth.getCurrentUser(); updateUI(user); } else { // If sign in fails, display a message to the user. Log.w(TAG, "createUserWithEmail:failure", task.getException()); Toast.makeText(EmailPasswordActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); updateUI(null); } } });
getCurrentUser
para coletar os dados da conta do usuário.
Conectar um usuário com endereço de e-mail e senha
As etapas para um usuário fazer login com uma senha são semelhantes às de criação de uma nova conta. Na atividade de login do app, faça o seguinte:
- No método
onCreate
da atividade de login, acesse a instância compartilhada do objetoFirebaseAuth
:Kotlin+KTX
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- Ao inicializar sua atividade, verifique se o usuário está conectado no momento:
Kotlin+KTX
public override fun onStart() { super.onStart() // Check if user is signed in (non-null) and update UI accordingly. val currentUser = auth.currentUser if (currentUser != null) { reload() } }
Java
@Override public void onStart() { super.onStart(); // Check if user is signed in (non-null) and update UI accordingly. FirebaseUser currentUser = mAuth.getCurrentUser(); if(currentUser != null){ reload(); } }
- Quando um usuário fizer login no app, transmita o endereço de e-mail e
a senha dele para
signInWithEmailAndPassword
:Kotlin+KTX
auth.signInWithEmailAndPassword(email, password) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithEmail:success") val user = auth.currentUser updateUI(user) } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithEmail:failure", task.exception) Toast.makeText( baseContext, "Authentication failed.", Toast.LENGTH_SHORT, ).show() updateUI(null) } }
Java
mAuth.signInWithEmailAndPassword(email, password) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithEmail:success"); FirebaseUser user = mAuth.getCurrentUser(); updateUI(user); } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithEmail:failure", task.getException()); Toast.makeText(EmailPasswordActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); updateUI(null); } } });
FirebaseUser
.
Recomendado: ativar a proteção contra enumeração de e-mails
Alguns métodos do Firebase Authentication que usam endereços de e-mail como parâmetros geram erros específicos caso o endereço não seja registrado quando necessário (por exemplo, ao fazer login com um endereço de e-mail e senha, ou se ele for registrado quando desnecessário, como ao mudar o e-mail de um usuário). Embora esses métodos sejam úteis para sugerir soluções específicas aos usuários, eles também podem ser usados indevidamente por agentes mal-intencionados para descobrir os endereços de e-mail registrados.
Para mitigar esse risco, recomendamos ativar a proteção contra enumeração de e-mails
no seu projeto usando a ferramenta gcloud
do Google Cloud. A ativação desse
recurso muda o comportamento dos relatórios de erro do Firebase Authentication, então verifique se o app
não se baseia em erros mais específicos.
Próximas etapas
Depois que um usuário faz login pela primeira vez, uma nova conta de usuário é criada e vinculada às credenciais, que podem ser o número do telefone, o nome de usuário e a senha ou as informações do provedor de autenticação. Essa nova conta é armazenada como parte do projeto do Firebase e pode ser usada para identificar um usuário em todos os apps do projeto, seja qual for o método de login utilizado.
-
Você pode receber as informações básicas de perfil do usuário do objeto
FirebaseUser
nos seus aplicativos. Consulte Gerenciar usuários. Nas Regras de segurança do Firebase Realtime Database e do Cloud Storage, é possível obter da variável
auth
o ID exclusivo do usuário que fez login e usar esse ID para controlar quais dados uma pessoa pode acessar.
Os usuários podem fazer login no app usando vários provedores de autenticação. Basta vincular as credenciais desses provedores a uma conta de usuário.
Para desconectar um usuário, chame
signOut
:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();