Cómo autenticar con Firebase mediante cuentas basadas en contraseña en Android

Puedes usar Firebase Authentication para permitir que los usuarios se autentiquen en Firebase con su dirección de correo electrónico y su contraseña, y para administrar las cuentas con contraseña de tu app.

Antes de comenzar

  1. Agrega Firebase a tu proyecto Android.
  2. Agrega la dependencia para Firebase Authentication a tu archivo build.gradle de nivel de tu app:
    implementation 'com.google.firebase:firebase-auth:16.0.3'
  3. Si aún no conectaste la app al proyecto de Firebase, puedes hacerlo desde Firebase console.
  4. Habilita el acceso con correo electrónico y contraseña:
    1. En Firebase console, abre la sección Auth.
    2. En la pestaña Método de acceso, habilita el método de acceso Correo electrónico/contraseña y haz clic en Guardar.

Crea una cuenta basada en contraseña

Para crear una cuenta de usuario nueva con una contraseña, sigue estos pasos en la actividad de acceso de la app:

  1. En el método onCreate de tu actividad de registro, obtén la instancia compartida del objeto FirebaseAuth:
    private FirebaseAuth mAuth;
    // ...
    mAuth = FirebaseAuth.getInstance();
    
  2. Cuando inicies la Actividad, verifica que el usuario haya accedido:
    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        updateUI(currentUser);
    }
    
  3. Cuando un usuario nuevo se registre mediante el formulario de registro de tu app, completa todos los pasos de validación de cuentas nuevas que necesite tu app (como verificar que la contraseña esté escrita correctamente y cumpla con los requisitos de complejidad).
  4. Pasa la dirección de correo electrónico y la contraseña del nuevo usuario a createUserWithEmailAndPassword para crear la cuenta nueva:
    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);
                    }
    
                    // ...
                }
            });
    
    Si se creó la cuenta nueva, el usuario también accede. En la devolución de llamada, puedes usar el método getCurrentUser para obtener los datos de la cuenta del usuario.

Haz que un usuario acceda con una dirección de correo electrónico y una contraseña

Los pasos para que un usuario acceda con una contraseña son similares a los pasos para crear una cuenta nueva. En la actividad de acceso de la app, haz lo siguiente:

  1. En el método onCreate de tu actividad de acceso, obtén la instancia compartida del objeto FirebaseAuth:
    private FirebaseAuth mAuth;
    // ...
    mAuth = FirebaseAuth.getInstance();
    
  2. Cuando inicies la actividad, verifica que el usuario haya accedido:
    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        updateUI(currentUser);
    }
    
  3. Cuando un usuario accede a tus apps, pasa la dirección de correo electrónico y la contraseña a signInWithEmailAndPassword:
    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);
                    }
    
                    // ...
                }
            });
    
    Si se accede correctamente, puedes usar el valor FirebaseUser para continuar.

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 de 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:

FirebaseAuth.getInstance().signOut();

Enviar comentarios sobre...

Si necesitas ayuda, visita nuestra página de asistencia.