Que tal, en esta entrada vamos a realizar la autenticación de múltiples usuarios en un sencillo webform empleando la información de una base de datos para enlazar y manipular las consultas con LINQ.
Antes veamos una reseña de lo que es LINQ.
Se define como un lenguaje integrado de consultas donde podemos realizar operaciones nativas de SQL y emplearlas en tecnologias como C# o VB, gracias al mapeo gráfico de campos y relación de tablas facilita la comunicación y el manejo de los datos almacenados, proporcionando una mayor velocidad de respuesta y un sencillo manejo del código.
Definimos nuestra tabla en SQL Server, el campo ID se asigna como llave primaria.
Dentro del entorno Visual Studio añadimos una conexión de datos hacia la tabla Sql Server con el asistente de conexión (Testear la conexión).
y en la solución agregamos un nuevo item de tipo LinqToSql Class (renombrarlo).
Observemos que este archivo tiene extension .dbml
En la pestaña de conexiones, seleccionamos la base de datos y arrastramos la tabla con la que vamos a interactuar ( en este caso la tabla va a ser la de los usuarios). NOTESE: que en la tabla vemos la llave primaria de la tabla.
Creamos una página con los controles de formulario (textbox de usuario y password, botón send).
Y en el Codebehind (.cs) instanciamos nuestra clase linqToSql dentro de la partial class de esta manera:
NombreArchivoDbmlDataContext MiObjeto = new NombreArchivoDbmlDataContext();
Esto es para poder realizar consultas a la tabla.
Generamos un evento de tipo Click en el botón send del formulario para establecer una variable sin tipo, la cual va alojar el query o bien llamarlo desde un método de tipo return:
var resultado = (from x in MiObjeto.NombreTablaBD where x.User.Equals(nombretextbox1.Text) & x.Pass.Equals(nombretextbox2.Text) select x).FirstOrDefault();
resultado es una consulta que opera con x (variable de rango), la cual se asigna al objeto linqclass que apunta a la tabla de usuarios de la base de datos, acto seguido se emplea una condición donde si el usuario y la contraseña de la tabla equivalen a el valor de los textbox del formulario se seleccionen ambos y se hace un recorrido de tipo .First or default() el cual verifica si hay un elemento o no.
Ingresamos un if después del query donde condicionamos nuestra variable “var” para que nos de acceso hacia el sitio web (pagina de administrador).
if (resultado != null) { Session["User"] = nombretextbox1.Text;
Session["Role"] = resultado.Role;
Response.Redirect("~/paginaAdmin.aspx");
}
Si el resultado es diferente de nulo es decir tiene «valor» creamos una sesión con el nombre del usuario y con el rol del usuario el cual ingreso las credenciales y lo redireccionamos a la página de inicio del administrador, de lo contrario se mantiene en login.
Por último en la página de administrador en el evento pageLoad capturamos las sesiones del usuario de la siguiente manera:
string usuario = Session["Usuario"] as string; Label1.Text = usuario; string rol = Session["Role"] as string; if (rol != "admin") { Response.Redirect("~/paginaVisitante.aspx"); }
El nombre del usuario logueado se almacena en la etiqueta Label1 y se condiciona el perfil del mismo, si el rol es diferente de administrador entonces se redirecciona a la página de visitante.
Para destruir la sesión es importante que en el evento pageLoad de login (formulario) se añada esta linea de código para que se ejecute la acción cada vez que los usuarios se redireccionen al login.
protected void Page_Load(object sender, EventArgs e) { Session.Clear(); }
Resumen de la entrada:
*Creacion y diseño de una tabla para la gestión de usuarios en X sistema.
*Conexion y configuracion de la base de datos mediante el explorador de servidores de VS tomando como origen de datos SQLClient.
*Consulta hacia una BD de Sql Server mediante Linq en WebForm empleando, comparando un usuario y contraseña.
*El usuario se direcciona hacia la página web según el perfil asignado en la BD.
Para que el login esté completo sólo falta restringir el acceso a las diferentes páginas mediante el uso de sesiones, puedes revisar como hacerlo Aquí (Restricción mediante sesión)..