Ir para o console

Autenticar com o Firebase no Android usando um sistema de autenticação personalizado

Para integrar o Firebase Authentication a um sistema de autenticação personalizado, modifique seu servidor de autenticação para produzir tokens de login personalizados quando um usuário conseguir fazer login. Seu app recebe e utiliza esse token para se autenticar com o Firebase.

Antes de começar

  1. Adicione o Firebase ao seu projeto para Android, caso ainda não tenha feito isso.
  2. No arquivo build.gradle no nível do projeto, inclua o repositório Maven do Google nas seções buildscript e allprojects.
  3. Adicione as dependências da biblioteca do Firebase Authentication para Android ao arquivo Gradle no nível do aplicativo do módulo (geralmente app/build.gradle):
    implementation 'com.google.firebase:firebase-auth:19.0.0'
  4. Para consultar as chaves de servidor do seu projeto, siga estas etapas:
    1. Acesse a página Contas de serviço nas configurações do seu projeto.
    2. Clique em Gerar uma nova chave privada na parte inferior da seção SDK Admin do Firebase da página Contas de serviço.
    3. O novo par de chave pública/privada da conta de serviço é salvo automaticamente no seu computador. Copie esse arquivo para o seu servidor de autenticação.

Autenticar com o Firebase

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

    Java

    private FirebaseAuth mAuth;// ...
    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();

    Kotlin

    private lateinit var auth: FirebaseAuth// ...
    // Initialize Firebase Auth
    auth = FirebaseAuth.getInstance()
  2. Ao inicializar sua atividade, verifique se o usuário está conectado no momento:

    Java

    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        updateUI(currentUser);
    }

    Kotlin

    public override fun onStart() {
        super.onStart()
        // Check if user is signed in (non-null) and update UI accordingly.
        val currentUser = auth.currentUser
        updateUI(currentUser)
    }
  3. Quando os usuários fazem login no seu app, envie as credenciais de login (por exemplo, nome de usuário e senha) para seu servidor de autenticação. O servidor verifica as credenciais e retorna um token personalizado se elas forem válidas.
  4. Depois de receber o token personalizado do servidor de autenticação, transmita-o para signInWithCustomToken fazer o login do usuário.

    Java

    mAuth.signInWithCustomToken(mCustomToken)
            .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, "signInWithCustomToken:success");
                        FirebaseUser user = mAuth.getCurrentUser();
                        updateUI(user);
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInWithCustomToken:failure", task.getException());
                        Toast.makeText(CustomAuthActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }
                }
            });

    Kotlin

    customToken?.let {
        auth.signInWithCustomToken(it)
                .addOnCompleteListener(this) { task ->
                    if (task.isSuccessful) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "signInWithCustomToken:success")
                        val user = auth.currentUser
                        updateUI(user)
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInWithCustomToken:failure", task.exception)
                        Toast.makeText(baseContext, "Authentication failed.",
                                Toast.LENGTH_SHORT).show()
                        updateUI(null)
                    }
                }
    }
    Se o login for bem-sucedido, o AuthStateListener pode usar o método getCurrentUser para receber os dados da conta do usuário.

Próximas etapas

Depois que um usuário faz login pela primeira vez, uma nova conta é 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.

  • Nos seus aplicativos, use o objeto FirebaseUser para receber as informações básicas de perfil do usuário. Consulte Gerenciar usuários.

  • Nas Regras de segurança do Firebase Realtime Database e do Cloud Storage, é possível usar a variável auth para encontrar o ID exclusivo do usuário conectado. Utilize essa informação para controlar o acesso dele aos dados.

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:

Java

FirebaseAuth.getInstance().signOut();

Kotlin

FirebaseAuth.getInstance().signOut()