Ir al contenido principal

Xamarin.Forms - Administrar sesión de usuario

Hola que tal a todos, espero estén de lo mejor. Hoy quiero compartirles un ejemplo practico acerca de la administración de sesión de usuario al ingresar a una aplicación móvil.

Este post o artículo es parte de la implementación de la aplicación DÍAbetes que se viene elaborando. Todas las pruebas se viene realizando en un equipo móvil físico con Sistema Operativo Android, esto no restringe el uso de emuladores, además recordar que sólo se viene implementado por ahora los ejemplos prácticos para la plataforma de Android.

Requisitos:
Microsoft Visual Studio Community 2019.
Xamarin.Froms - XAML.
SQLite - Gestión de datos local.


Iniciamos agregando una propiedad para definir y almacenar el estado de la aplicación y persistirá en todo el código de la aplicación, es decir el valor se conservará en el dispositivo cuando la aplicación está en pausa o apagada y haremos uso de 2 propiedades (IsLoggedIn keyEmail) a nivel de aplicación que será creadas en diferentes momento.

Desarrollo de código:
Abrimos el archivo App.xaml.cs y agregamos la propiedad Properties["IsLoggedIn"] e inicializamos en false (propiedad que cambiará el valor a true cuando se ingresa a la aplicación):

        public static NavigationPage Mainpage;
       
        public App()
        {
            InitializeComponent();

            Properties["IsLoggedIn"] = false;
            MainPage = new MainPage();
            MainPage = new NavigationPage(new MainPage())
            {
                BarBackgroundColor = Color.FromHex("#3399ff")
            };

        }

Ahora abrimos el archivo Login.xaml.cs y adicionaremos la propiedad de nombre keyEmail donde le pasaremos el valor del email del usuario Application.Current.Properties["keyEmail"] = userNameEntry.Text.Trim(); (en mi caso estoy considerando como un valor único el email, con la cual realizare todas mis validaciones) y asignamos el valor true a la propiedad IsLoggedIn (es decir estamos activando los valores de la sesión de acceso a la aplicación) Application.Current.Properties["IsLoggedIn"] = true;

        /// <summary>
        /// Botón para ingresar a la pantalla principal de la app
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void loging_Clicked(object sender, EventArgs e)
        {
            if (await ValidateForm())
            {
             
                IEnumerable<User> result = userData.whereUser(userNameEntry.Text.Trim(), passwordEntry.Text.Trim());

                if (result.Count() == 0)
                {
                    await DisplayAlert("Alerta", "Email o Password Incorrectos.", "OK");
                }
                else if (result.Count() == 1)
                {
                    Application.Current.Properties["keyEmail"] = userNameEntry.Text.Trim();
                    Application.Current.Properties["IsLoggedIn"] = true;

                    await Navigation.PushAsync(new PageMain());
                }
                else if (result.Count() >= 1)
                {
                    await DisplayAlert("Alerta", "Existe más de una cuenta registrada, favor de solicitar la correción de la cuenta.", "OK");
                }
            }
        }

Seguidamente agregaremos una clase utilitario e implementar nuestros métodos que administra nuestra sesión de cada usuario, para la cual creamos un directorio de nombre Utility y agregamos una nueva clase en el mencionado directorio, asignamos el nombre de LoginAccess a la nueva clase y dentro de ella se crea los siguiente métodos:

LoginAccess(string pstrEmailUser) Encargado de asignar un valor a la propiedad keyEmail (propiedad que creada al iniciar la sesión - se encuentra en el método del login).

AuthentifyLogin() método encargado de retornar el valor de la propiedad keyEmail después de iniciar la sesión (valor que persistirá durante todo el ciclo de vida de nuestra aplicación).

LogoutLogin() encargado de limpiar las propiedades que administrar la sesión de la aplicación.

using Xamarin.Forms;

namespace AppDIAbetes.Utility
{
    public class LoginAccess
    {
        public static string sstrEmail = "";
        public LoginAccess(string pstrEmailUser)
        {

            if (Application.Current.Properties.ContainsKey("keyEmail"))
            {
                var vKeyEmail = Application.Current.Properties["keyEmail"];
                sstrEmail = vKeyEmail.ToString();
            }
        }
        public string AuthentifyLogin()
        {
            return sstrEmail;
        }

        public void LogoutLogin()
        {
      Application.Current.Properties["IsLoggedIn"] = false; 
      Application.Current.Properties["keyEmail"] = null;
        }
    }

}

Y para finalizar abrimos el archivo PageMain.xaml.cs (corresponde a la publicación de Crear Menú Hamburguesa) y adicionaremos las siguiente instrucciones para poder obtener lo valores asignados a las propiedades IsLoggedIn keyEmail desde el login:

1. Referenciamos e invocamos al método LoginAccess(sstrEmailUser); para pasar el valor del email del usuario, y luego pasarlo a la propiedad labelEmail.Text = strAuthentifyUser

        private string strAuthentifyUser;
        public static string sstrEmailUser;
        LoginAccess OAuthLogin = new LoginAccess(sstrEmailUser);

        public PageMain()
        {
     strAuthentifyUser = OAuthLogin.AuthentifyLogin();                  
     InitializeComponent();
            labelEmail.Text = strAuthentifyUser

            NavigationPage.SetHasNavigationBar(this, false);
            myPageMain();

        }

2. Para cerrar la sesión invocamos al método OAuthLogin.LogoutLogin(); desde la opción cerrar sessión del menú de nuestra aplicación.

        private async void OnListItemSelected(object sender, SelectedItemChangedEventArgs e)
        {
            var option = e.SelectedItem as Option;
            if (option.page != null)
            {               
                IsPresented = false;
                Detail = new NavigationPage(option.page);
            }
            else if (option.page == null || option.title == "Cerrar Sesión") {

                var result = await DisplayAlert("Confirmar", "Estas seguro de cerrar sesión", "SI", "NO");
                if (result)
                {
                    OAuthLogin.LogoutLogin();
                    await Navigation.PushAsync(new MainPage());
                }
                else
                {
                    return;
                }
            }

        }

Resultado:
Al finalizar la edición de esté post ya se cuenta con las siguiente interfaces desarrolladas.

   

   

Gratitud a Dios 😊 y gracias a todos ustedes por la acogida de este nuevo artículo, éxitos y bendiciones 🙏 y un gran abrazo a todos ✌...!!!

Comentarios

Entradas más populares de este blog

Habilitar Usuario HR Oracle

Al realizar la primera instalación del Oracle, el usuario HR por defecto está bloqueado y por ende no podemos loguearnos como dicho usuario, lo que debe hacer son los siguiente pasos, aplicables para Linux o Windows.
1. Conectarse como usuario system o sysdba + contraseña haciendo uso del comando connect.
Usuario: system
Password: xxxx 


2. Hacer uso  del comando alter user hr account unlock desbloqueamos la cuenta.
alter user hr account unlock;

3. Escribimos el comando alter user HR identified by hr; con esto estamos diciendo que la contraseña será hr.

alter user HR identified by hr;

4. Ahora testeamos la conexión con el comando - conn hr/hr@xe. Si deseas después de conectarnos se puede realizar un select a la tabla employees del hr.


Resultado del select realizado
5. Con todos estos pasos realizados ya podemos logearnos desde cualquier IDE como el usuario hr  y la contraseña hr que definimos en el paso 3. 
Para finalizar nos loguearemos con el IDE Oracle SQL Developer.

Espero les sea de utilidad,…

Usuario SYS y SYSTEM - ORACLE

Usuario SYS y SYSTEM
Ambos usuario son creados de forma automática al crear la base de datos ORACLE y se otorga el rol de DBA.

SYS (password por defecto: CHANGE_ON_INSTALL).
SYSTEM (password por defecto: MANAGER).

Lo que se recomienda es cambiar el password de ambos usuarios por el tema de seguridad.

SYS:
Todas las tablas y vistas para el diccionario de datos de la base de datos están almacenados en el esquema SYS. Estas tablas y vistas son críticas para el funcionamiento de la base de datos ORACLE. Para mantener la integridad del diccionario de datos, las tablas del esquema SYS son manipulados solo por la base de datos. Nunca se debería modificar algo o crear tablas en el esquema del usuario SYS.

SYSTEM:
El usuario SYSTEM se utiliza para crear tablas y vistas adicionales que muestran información administrativa, tablas internas y vistas utilizado por varias opciones y herramientas de la base de datos ORACLE. No se recomienda utilizar el esquema SYSTEM para almacenar tablas de interés para usu…

Parámetro de entrada y salida – PL/SQL

Parámetro de entrada y salida – PL/SQL:
Los parámetros de entrada y salida no son los parámetros de inicialización de la base de datos ORACLE. Los parámetros de entra y salida son utilizados mayormente en implementaciones de funciones, procedimientos almacenados o bloques de código bajo el lenguaje del PL/SQL, se considera que ambos parámetros (entra y salida) puedan realizar operaciones en el mismo bloque PL/SQL, es decir, si enviamos un parámetro de entrada hará que cumpla cierta operación y retornara los valores de salida de dicha operación procesada de acuerdo al parámetro de ingresado. Es de acuerdo al caso que nos presenta en la implementación.
Algo importante al definir los parámetros, es saber y considerar cuántos tipos de parámetro existe si solo hablamos de entrada y salida, en realidad mi determinación seria 3 tipos:

Parámetros:

IN – entrada
OUT – salida
IN OUT – entrada salida

Parámetro IN – entrada:
El comportamiento común de estés tipos de parámetros es estar siempre pendiente d…