Proceso de autenticación en aplicación WinForms
El siguiente ejemplo demuestra un sistema de autenticación básico donde el identificador de usuario se transfiere entre formularios mediante la propiedad Tag.
1. Lógica del botón de inicio de sesión
La función principal valida las credenciales y, si son correctas, transfiree el ID del usuario al formulario principal.
private void BtnIngresar_Click(object sender, EventArgs e)
{
// Obtener datos de entrada
string usuario = CajaTextoUsuario.Text.Trim();
string clave = CajaTextoClave.Text.Trim();
// Validar campos obligatorios
if (string.IsNullOrWhiteSpace(usuario))
{
MostrarAdvertencia("El campo usuario es requerido");
CajaTextoUsuario.Focus();
return;
}
if (string.IsNullOrWhiteSpace(clave))
{
MostrarAdvertencia("El campo contraseña es requerido");
CajaTextoClave.Focus();
return;
}
// Preparar modelo de datos
var credenciales = new ModeloAutenticacion
{
NombreUsuario = usuario,
Contrasena = clave
};
// Ejecutar verificación en base de datos
var gestorUsuarios = new GestorDatosUsuario();
int idEncontrado = gestorUsuarios.VerificarCredenciales(credenciales);
// Evaluar resultado de autenticación
if (idEncontrado > 0)
{
MostrarExito("Acceso concedido");
// Configurar y mostrar ventana principal
var ventanaPrincipal = new VentanaPrincipal();
ventanaPrincipal.Tag = idEncontrado;
ventanaPrincipal.WindowState = FormWindowState.Maximized;
ventanaPrincipal.Show();
this.Hide();
}
else
{
MostrarError("Credenciales inválidas");
}
}
2. Capa de acceso a datos
La consulta SQL verifica la existencia del usuario con las credenciales proporcionadas.
public int VerificarCredenciales(ModeloAutenticacion datos)
{
string consultaSQL = @"SELECT Identificador
FROM UsuariosSistema
WHERE Nombre=@Nombre AND Contraseña=@Clave";
var parametros = new SqlParameter[]
{
new SqlParameter("@Nombre", datos.NombreUsuario),
new SqlParameter("@Clave", datos.Contrasena)
};
object resultado = AccesoBD.EjecutarEscalar(consultaSQL, CommandType.Text, parametros);
if (resultado != null && int.TryParse(resultado.ToString(), out int id))
{
return id;
}
return 0;
}
3. Clase de acceso a base de datos
El método genérico ejecuta consultas que retornan un único valor escalar.
public static object EjecutarEscalar(string consulta, CommandType tipo, params SqlParameter[] parametros)
{
using (var conexion = new SqlConnection(CadenaConexion))
{
using (var comando = new SqlCommand(consulta, conexion))
{
comando.CommandType = tipo;
if (parametros != null)
{
comando.Parameters.AddRange(parametros);
}
conexion.Open();
object escalar = comando.ExecuteScalar();
return escalar == DBNull.Value ? null : escalar;
}
}
}