Ir a la consola

Autentica con Firebase en Android mediante un sistema de autenticación personalizado

Puedes integrar Firebase Authentication con un sistema de autenticación personalizado. Para ello, cambia el servidor de autenticación para que genere tokens firmados personalizados cuando un usuario acceda de forma correcta. La app recibe este token y lo usa para realizar la autenticación en Firebase.

Antes de comenzar

  1. Agrega Firebase a tu proyecto de Android.
  2. Agrega la dependencia para Firebase Authentication a tu archivo build.gradle de nivel de app:
    implementation 'com.google.firebase:firebase-auth:16.1.0'
  3. Obtén las claves del servidor de tu proyecto:
    1. Ve a la página Cuentas de servicio en la configuración del proyecto.
    2. Haz clic en Generar nueva clave privada en la parte inferior de la sección SDK de Firebase Admin de la página Cuentas de servicio.
    3. El par de claves públicas o privadas de la cuenta de servicio nueva se guarda de manera automática en la computadora. Copia este archivo en el servidor de autenticación.

Autentica con Firebase

  1. En el método onCreate de tu actividad de acceso, obtén la instancia compartida del objeto FirebaseAuth:

    Java
    Android

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

    Kotlin
    Android

    private lateinit var auth: FirebaseAuth// ...
    // Initialize Firebase Auth
    auth = FirebaseAuth.getInstance()
  2. Cuando inicies la actividad, verifica que el usuario haya accedido:

    Java
    Android

    @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
    Android

    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. Cuando los usuarios acceden a la app, envía sus credenciales de acceso (por ejemplo, el nombre de usuario y la contraseña) al servidor de autenticación. Tu servidor verifica las credenciales y devuelve un token personalizado si son válidas.
  4. Después de recibir el token personalizado de tu servidor de autenticación, pásalo a signInWithCustomToken para que el usuario acceda:

    Java
    Android

    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
    Android

    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)
                    }
                }
    }
    Si el acceso se ejecuta de forma correcta, el AuthStateListener puede usar el método getCurrentUser para obtener los datos de la cuenta del usuario.

Pasos siguientes

Cuando un usuario accede por primera vez, se crea una cuenta de usuario nueva y se la vincula con las credenciales (el nombre de usuario y la contraseña, el número de teléfono o la información del proveedor de autenticación) con las que accedió el usuario. Esta cuenta se almacena como parte de tu proyecto de Firebase y se puede usar para identificar a un usuario en todas las apps del proyecto, sin importar cómo acceda.

  • En las apps, puedes obtener la información básica del perfil del usuario a partir del objeto FirebaseUser. Consulta Cómo administrar usuarios.

  • En las reglas de seguridad de Firebase Realtime Database y Cloud Storage, puedes obtener el ID único del usuario que accedió a partir de la variable auth y usarlo para controlar los datos a los que tiene acceso.

Para permitir que los usuarios accedan a tu app con varios proveedores de autenticación, puedes vincular las credenciales de proveedores de autenticación con una cuenta de usuario existente.

Para salir de la sesión de un usuario, llama a signOut de la siguiente manera:

Java
Android

FirebaseAuth.getInstance().signOut();

Kotlin
Android

FirebaseAuth.getInstance().signOut()