none
Como mostrar el nombre del usuario logueado en C# RRS feed

  • Pregunta

  • Buenas, necesito ayuda en una aplicacion que estoy desarrollando.
    Mi aplicacion cuenta con un login conectado a una base de datos SQL.
    La tabla en la que registro al usuario es asi:

    USUARIO
    usuario
    contraseña
    nombre
    apellidos
    cargo
    fec_reg

    Cuando se loguea el usuario, muestra un mensaje del ID del usuario y recien se puede acceder a los demas formularios del aplicativo... el codigo que uso para el login es el siguiente:

    public void login()
            {
                con.Open();
                SqlCommand consulta = new SqlCommand("select * from Usuario where usuario='"+cboid.Text+"'and contraseña='"+txtcon.Text+"'",con);
                SqlDataReader ejecutar = consulta.ExecuteReader();
                if(ejecutar.Read()==true)
                {
                    MessageBox.Show("Bienvenido "+cboid.Text);
                    this.Hide();
                    Inicio ini = new Inicio();
                    ini.Show();
                }
                else
                {
                    MessageBox.Show("Datos Incorrectos");
                    txtcon.Clear();
                    txtcon.Focus();
                }
    
                con.Close();
            }

    La idea que tengo es que al continua, y al abrir el siguiente formulario INICIO, y los siguientes formularios, me muestre los datos del usuario logeado.

    Hay alguna forma de hacerlo?
    Apreciare enormemente la ayuda.

    domingo, 22 de noviembre de 2015 10:29

Respuestas

  • Hola Chris_Vidal,

    Se entiende que la gestión de autenticación y autorización deberías abstraerla en una clase que proveea de los mecanismos necesarios (métodos, propiedades) para validar, persistir y retornar información (como el usuario logeado), entre otras cosas.

    Si no lo has considerado de esa manera, podrías iniciar el cometido asignando el nombre del usuario logeado a una propiedad estática, dicha propiedad podría ser escrita y leída desde cualquier lugar sin necesidad de instanciarla. Agrega al proyecto una clase a la que le puedes llamar Login.cs, la clase deberá ser definida como estática, algo como lo siguiente:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Test
    {
        internal static class Login
        {
            internal static string usuarioLogeado { get; set; }
        }
    }

    La clase Login.cs podrías usarla desde cualquier lugar tanto para escribir como para leer. Se entiende que se escribe al momento de que el usuario que intenta ingresar a la aplicación es valido y se lee en cualquier lugar de la aplicación:

    private void btnGuardarUsuario_Click(object sender, EventArgs e)
            {
                Login.usuarioLogeado = "Miguel Angel";
            }
    
            private void btnLeerUsuario_Click(object sender, EventArgs e)
            {
                txtUsuario.Text = Login.usuarioLogeado;
            }

    • Marcado como respuesta Chris_Vidal martes, 24 de noviembre de 2015 22:13
    domingo, 22 de noviembre de 2015 19:41

Todas las respuestas

  • Hola.

    Lo primero no concatenes con + es peligroso para la seguridad de la DB usa parámetros.

    SqlCommand consulta = new SqlCommand("Select * from Usuarios where Usuario=@Usuario and contrasena =@contraseña",miconexion);
    
    consulta.Parameters.AddWithValue("@Usuario", txtusuario.text);
    consulta.Parameters.AddWithValue("@contraseña", txtpass.text);
    
    SqlDataReader ejecuta = consulta.ExecuteReader();

    Para poder realizar lo que comentas, creo que tienes dos opciones, la primera crear un objeto estático que tendrás disponible en toda la aplicación con los datos que te interesen del usuario logueado o crear un objeto y ir pasándolo como parámetro a cada formulario que abras.

    Un saludo.


    Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido útil agradécelo marcándola como útil.

    domingo, 22 de noviembre de 2015 10:41
  • hola

    para implementar la autenticacion podrias usar algo como ser

    string query = "select COUNT(*) from Usuario where usuario= @usuario and contraseña= @password";
    SqlCommand consulta = new SqlCommand(query,con);
    consulta.Parameters.AddWithValue("@usuario", cboid.Text);
    consulta.Parameters.AddWithValue("@password", txtcon.Text);
    
    int count = Convert.ToInt32(consulta.ExecuteScalar());
    if(count > 0)
    {
    	MessageBox.Show("Bienvenido "+cboid.Text);
    	.
    	.
    	.

    por otro lado el login se implementa previo a mostrar el form principal

    Login – Usando Password con Hash

    la idea es que la ventana de login a abras desde el Main() y luego de pasar la autenticacion abres el form principal

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    domingo, 22 de noviembre de 2015 13:46
  • Hola como estás, mira aquí te dejo un vídeo que te puede ser de ayuda. https://www.youtube.com/watch?v=iKGqnIuTu8s
    domingo, 22 de noviembre de 2015 18:01
  • Hola Chris_Vidal,

    Se entiende que la gestión de autenticación y autorización deberías abstraerla en una clase que proveea de los mecanismos necesarios (métodos, propiedades) para validar, persistir y retornar información (como el usuario logeado), entre otras cosas.

    Si no lo has considerado de esa manera, podrías iniciar el cometido asignando el nombre del usuario logeado a una propiedad estática, dicha propiedad podría ser escrita y leída desde cualquier lugar sin necesidad de instanciarla. Agrega al proyecto una clase a la que le puedes llamar Login.cs, la clase deberá ser definida como estática, algo como lo siguiente:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Test
    {
        internal static class Login
        {
            internal static string usuarioLogeado { get; set; }
        }
    }

    La clase Login.cs podrías usarla desde cualquier lugar tanto para escribir como para leer. Se entiende que se escribe al momento de que el usuario que intenta ingresar a la aplicación es valido y se lee en cualquier lugar de la aplicación:

    private void btnGuardarUsuario_Click(object sender, EventArgs e)
            {
                Login.usuarioLogeado = "Miguel Angel";
            }
    
            private void btnLeerUsuario_Click(object sender, EventArgs e)
            {
                txtUsuario.Text = Login.usuarioLogeado;
            }

    • Marcado como respuesta Chris_Vidal martes, 24 de noviembre de 2015 22:13
    domingo, 22 de noviembre de 2015 19:41
  • Buenos días Willams Morales, me gustaría implementarlo de esa manera me puedes ampliar un poco mas este ejemplo por favor.

    entiendo que es una pregunta del 2015 pero me gustaría implementarla.

    muchas gracias

    Roberto

    jueves, 7 de marzo de 2019 13:06