Acompanhe as novidades sobre tudo o que foi anunciado no Firebase Summit e saiba como o Firebase pode ajudar a acelerar o desenvolvimento de apps e executá-los com confiança. Saiba mais

Autenticar com o Firebase usando contas baseadas em senha no Android

Você pode usar o Firebase Authentication para permitir que seus usuários se autentiquem com o Firebase usando seus endereços de e-mail e senhas e para gerenciar as contas baseadas em senha do seu aplicativo.

Antes de você começar

  1. Se ainda não o fez, adicione o Firebase ao seu projeto Android .

  2. Se você ainda não conectou seu aplicativo ao projeto do Firebase, faça-o no console do Firebase .
  3. Ativar login por e-mail/senha:
    1. No console do Firebase , abra a seção Auth .
    2. Na guia Método de login , habilite o método de login Email/senha e clique em Salvar .
  4. No arquivo Gradle do módulo (nível do aplicativo) (geralmente <project>/<app-module>/build.gradle ), adicione a dependência para a biblioteca Firebase Authentication Android. Recomendamos usar o Firebase Android BoM para controlar o controle de versão da biblioteca.

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:31.2.0')
    
        // 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'
    }
    

    Ao usar o Firebase Android BoM , seu aplicativo sempre usará versões compatíveis das bibliotecas do Firebase Android.

    (Alternativa) Adicionar dependências da biblioteca Firebase sem usar o BoM

    Se você optar por não usar o Firebase BoM, deverá especificar cada versão da biblioteca Firebase em sua linha de dependência.

    Observe que, se você usar várias bibliotecas do Firebase em seu aplicativo, recomendamos usar o BoM para gerenciar as versões da biblioteca, o que garante que todas as versões sejam compatíveis.

    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:21.1.0'
    }
    

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:31.2.0')
    
        // 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'
    }
    

    Ao usar o Firebase Android BoM , seu aplicativo sempre usará versões compatíveis das bibliotecas do Firebase Android.

    (Alternativa) Adicionar dependências da biblioteca Firebase sem usar o BoM

    Se você optar por não usar o Firebase BoM, deverá especificar cada versão da biblioteca Firebase em sua linha de dependência.

    Observe que, se você usar várias bibliotecas do Firebase em seu aplicativo, recomendamos usar o BoM para gerenciar as versões da biblioteca, o que garante que todas as versões sejam compatíveis.

    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:21.1.0'
    }
    

Crie uma conta baseada em senha

Para criar uma nova conta de usuário com uma senha, conclua as seguintes etapas na atividade de login do seu aplicativo:

  1. No método onCreate da sua atividade de inscrição, obtenha a instância compartilhada do objeto FirebaseAuth :

    Kotlin+KTX

    private lateinit var auth: FirebaseAuth
    // ...
    // Initialize Firebase Auth
    auth = Firebase.auth

    Java

    private FirebaseAuth mAuth;
    // ...
    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();
  2. 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();
        }
    }
  3. Quando um novo usuário se inscrever usando o formulário de inscrição de seu aplicativo, conclua todas as novas etapas de validação de conta exigidas pelo aplicativo, como verificar se a senha da nova conta foi digitada corretamente e se atende aos requisitos de complexidade.
  4. Crie uma nova conta passando 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);
                    }
                }
            });
    Se a nova conta foi criada, o usuário também está conectado. No retorno de chamada, você pode usar o método getCurrentUser para obter os dados da conta do usuário.

Entrar um usuário com um endereço de e-mail e senha

As etapas para entrar em um usuário com uma senha são semelhantes às etapas para criar uma nova conta. Na atividade de login do seu aplicativo, faça o seguinte:

  1. No método onCreate da sua atividade de login, obtenha a instância compartilhada do objeto FirebaseAuth :

    Kotlin+KTX

    private lateinit var auth: FirebaseAuth
    // ...
    // Initialize Firebase Auth
    auth = Firebase.auth

    Java

    private FirebaseAuth mAuth;
    // ...
    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();
  2. 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();
        }
    }
  3. Quando um usuário fizer login em seu aplicativo, passe o endereço de e-mail e a senha do usuário 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);
                    }
                }
            });
    Se o login for bem-sucedido, você poderá usar o FirebaseUser retornado para continuar.

Recomendado: ativar a proteção de enumeração de e-mail

Alguns métodos do Firebase Authentication que usam endereços de e-mail como parâmetros lançam erros específicos se o endereço de e-mail não for registrado quando deve ser registrado (por exemplo, ao fazer login com um endereço de e-mail e senha) ou registrado quando não deve ser usado (por exemplo, ao alterar o endereço de e-mail de um usuário). Embora isso possa ser útil para sugerir soluções específicas aos usuários, também pode ser usado de forma abusiva por agentes mal-intencionados para descobrir os endereços de e-mail registrados por seus usuários.

Para reduzir esse risco, recomendamos que você ative a proteção de enumeração de e-mail para seu projeto usando a ferramenta gcloud do Google Cloud. Observe que habilitar esse recurso altera o comportamento do relatório de erros do Firebase Authentication: certifique-se de que seu aplicativo não dependa de erros mais específicos.

Próximos passos

Depois que um usuário faz login pela primeira vez, uma nova conta de usuário é criada e vinculada às credenciais — ou seja, nome de usuário e senha, número de telefone ou informações do provedor de autenticação — com as quais o usuário fez login. Essa nova conta é armazenada como parte do seu projeto do Firebase e pode ser usada para identificar um usuário em todos os aplicativos do seu projeto, independentemente de como o usuário faz login.

  • Em seus aplicativos, você pode obter as informações básicas do perfil do usuário no objeto FirebaseUser . Consulte Gerenciar usuários .

  • Nas regras de segurança do Firebase Realtime Database e Cloud Storage , você pode obter o ID de usuário exclusivo do usuário conectado a partir da variável de auth e usá-lo para controlar quais dados um usuário pode acessar.

Você pode permitir que os usuários façam login em seu aplicativo usando vários provedores de autenticação vinculando as credenciais do provedor de autenticação a uma conta de usuário existente.

Para desconectar um usuário, chame signOut :

Kotlin+KTX

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();