Bienvenido, me llamo Miguel y esta vez les traigo otro nuevo tutorial.
En esta era digital, la seguridad siempre ha sido una preocupación principal tanto para los desarrolladores como para los usuarios finales.
A medida que los usuarios de teléfonos inteligentes aumentan día a día, se desarrollan cada vez más aplicaciones para teléfonos inteligentes.
Según Statista
Más de 2 millones de aplicaciones están disponibles para descargar en Google Play Store y alrededor de 1,83 millones en Apple App Store.
La mayoría de estas aplicaciones requieren la identificación del usuario por motivos de privacidad y seguridad. Por lo tanto, el primer objetivo de cualquier aplicación que requiera seguridad es proporcionar autenticación.
Firebase Authentication
es uno de los servicios de autenticación más utilizados. Entonces, en este artículo, aprenderemos cómo podemos utilizar este servicio para proporcionar autenticación al usuario en la aplicación de Android. Al final de este artículo, podrá
- Implementar el método de inicio de sesión por
correo electrónico / contraseña
. - Trabaje con medidas de seguridad como verificación de correo electrónico y restablecimiento de contraseña.
Índice
Autenticación de correo electrónico y contraseña
Podemos agregar esta funcionalidad de autenticación a nuestra aplicación en dos pasos.
- Habilitar correo
electrónico / contraseña
en la consola de Firebase. - Código.
Para habilitar la autenticación de correo electrónico y contraseña para su proyecto de Android, debe abrir Firebase Console en su navegador y seleccionar su proyecto de Android.
Después de seleccionar su proyecto, debe elegir Autenticación en la barra lateral izquierda de la página de inicio de la Consola de Firebase.
Una vez que esté en la página de autenticación, haga clic en el método de inicio de sesión. Aquí verá muchos métodos de inicio de sesión, sin embargo, nos centraremos solo en el método de correo electrónico / contraseña.
Habilitemos este método y guardemos los cambios.
Ahora estamos listos para escribir código. Firebase proporciona la clase FirebaseAuth
que nos permite manejar todo el código relacionado con la autenticación. Entonces, comenzamos creando una instancia de FirebaseAuth
.
. . private FirebaseAuth mAuth; . .@Override protected void onCreate(Bundle savedInstanceState) { . . mAuth = FirebaseAuth.getInstance(); .. }
Usamos el método getInstance ()
para obtener una instancia del objeto FirebaseAuth
. A partir de aquí dividiremos el código en cuatro secciones diferentes.
El primer paso es registrar al usuario usando su correo electrónico y contraseña. Usamos el método createUserWithEmailAndPassword ()
que toma el correo electrónico y la contraseña como parámetros.
Agregamos un onCompleteListener
que se activará una vez que se complete este método. Dentro de este oyente, comprobaremos si la tarea deseada es exitosa o no.
Si la tarea, es decir, el registro del usuario se realiza correctamente, le enviaremos un correo de verificación al usuario.
private void registerNewUser(){ ........ mAuth.createUserWithEmailAndPassword(mEmail, mPassword) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { FirebaseUser user = mAuth.getCurrentUser(); .... sendVerificationEmail(); ....... Toast.makeText(MainActivity.this, "Verify your email", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "Authentication failed.",Toast.LENGTH_SHORT).show(); ..... } } }); }
Para enviar correo de verificación, recuperaremos al usuario actual usando el método getCurrentUser ()
en la instancia de FirebaseAuth
.
Observe que el usuario devuelto por getCurrentUser ()
es del tipo FirebaseUser
. Luego llamamos al método sendEmailVerification ()
en el usuario y una vez que se haya completado con éxito, firmaremos el usuario ()
para que el usuario pueda iniciar sesión nuevamente.
private void sendVerificationEmail() { FirebaseUser user = mAuth.getCurrentUser(); user.sendEmailVerification() .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { FirebaseAuth.getInstance().signOut(); } else { // this might be case when email is not received then you can show a button which will trigger this function to send Verification Mail again } } } ); }
Antes de iniciar sesión, debemos verificar si el usuario ha verificado el correo electrónico mediante el correo electrónico de verificación que enviamos.
Para verificar que usamos el método isEmailVerified ()
en la instancia de FirebaseUser
. Llamamos a este método durante el proceso de inicio de sesión.
// to check if Email is verified by user or not private boolean checkifEmailVerified() { return mAuth.getCurrentUser().isEmailVerified(); }
Iniciamos sesión como usuario usando el método signInWithEmailAndPassword ()
en la instancia de FirebaseAuth
.
Si esta tarea se completa con éxito, recuperamos al usuario actual nuevamente y verificamos si la dirección de correo electrónico del usuario está verificada o no.
Si se verifica, redirigimos al usuario a la página de inicio; de lo contrario, cerramos la sesión.
private void signInUser() { .....mAuth.signInWithEmailAndPassword(mEmail, mPassword) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { FirebaseUser user = mAuth.getCurrentUser(); if(checkifEmailVerified()){ ....... //REDIRECT TO HOMEPAGE ..... }else{ mAuth.signOut(); Toast.makeText(MainActivity.this, "Verify your email first.",Toast.LENGTH_SHORT).show(); } else { ...... } // ... } }); }
Firebase también proporciona un método simple para lidiar con la situación si el usuario olvida la contraseña. Proporciona un método llamado sendPasswordResetEmail ()
para enviar un correo electrónico de restablecimiento de contraseña.
Toma la dirección de correo electrónico del usuario como entrada.
private void sendResetPasswordEmail() { mAuth.sendPasswordResetEmail(email.getText().toString()) .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { Toast.makeText(MainActivity.this, "Password reset mail is sent.",Toast.LENGTH_SHORT).show(); } else { } } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Toast.makeText(MainActivity.this, "There is no id registered with this email address.",Toast.LENGTH_SHORT).show(); } }); }
Bueno, no es tanto un consejo profesional ni un consejo extraordinario, pero es muy importante para el flujo de autenticación correcto.
Al crear un nuevo usuario o iniciar sesión en un usuario, es necesario validar el correo electrónico y la contraseña con las restricciones adecuadas.
Para la contraseña, simplemente verificamos si la contraseña no está vacía y tiene caracteres de más de 6
.
Para el correo electrónico, usamos la clase Pattern
, que usa expresiones regulares para verificar si la identificación del correo electrónico proporcionada tiene un formato válido o no.
Recuerde, esto no valida si esta identificación de correo electrónico existe realmente o no.
Es por eso que verificamos la dirección de correo electrónico antes de permitir que el usuario inicie sesión con la dirección de correo electrónico.
String mEmail = emailEditText.getText().toString().trim(); String mPassword = passwordEditText.getText().toString().trim(); if (mEmail.isEmpty()) { emailEditText.setError("Email Required"); emailEditText.requestFocus(); return; } if (!Patterns.EMAIL_ADDRESS.matcher(mEmail).matches()) { emailEditText.setError("Valid Email Required"); emailEditText.requestFocus(); return; } if (mPassword.isEmpty() || password.length() < = 6) { passwordEditText.setError("Minimum 7 characters required"); passwordEditText.requestFocus(); return; }
Puede agregar más pasos de validación antes de usar el correo electrónico y la contraseña para registrarse o iniciar sesión.
Por lo general, intentamos fortalecer la contraseña mediante la introducción de restricciones como al menos un carácter en minúsculas y mayúsculas, en un símbolo, un carácter numérico, etc.
Hemos cubierto todos los pasos junto con un "Consejo adicional"
y llegamos al final de este artículo. Con este flujo de autenticación, creo que puede hacer que su aplicación sea más segura y profesional.
Gracias por leer este tutorial. ¡Feliz codificación!
Añadir comentario