COMO CREAR SISTEMA DE LOGIN CON MVC 4/ RAZOR 2/2

Publicado: 1 octubre, 2013 en c#, Programación

GENERAR EL CONTROLADOR USUARIO

Seleccionar carpeta Controllers/Agregar/Controlador

userContrlador_1

En el controlador de usuario se programa toda la lógica para poder registrar, Autenticar y finalizar sesión de los usuarios


Lógica controlador de usuario

En el archivo Controllers/UserController.cs, se codifica la lógica correspondiente a la autenticación y creación de usuarios

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;

namespace MvcLogin.Controllers
{
public class UserController : Controller
{
public ActionResult Index()
{
return View();
}

/// <summary>
/// Realizar el llamado de la vista que contiene la GUI de Autenticación de la aplicación
/// </summary>
/// <returns></returns>
[HttpGet]
public ActionResult logIn()
{
return View();
}

/// <summary>
/// Verificar los datos suministrados por el usuario al realizar la petición Post de envió de información
/// mediante la GUI de Autenticación de la aplicación.
/// </summary>
/// <param name=»user»></param>
/// <returns></returns>
[HttpPost]
public ActionResult logIn(Models.UserModel user)
{
if (ModelState.IsValid) //Verificar que el modelo de datos sea válido en cuanto a la definición de las propiedades
{
if (Isvalid(user.Email,user.Password))//Verificar que el email y clave exista utilizando el método privado
{

FormsAuthentication.SetAuthCookie(user.Email, false); //crea variable de usuario con el correo del usuario
return RedirectToAction(«Index», «Home»); //dirigir al controlador home vista Index una vez se a autenticado en el sistema
}
else
{
ModelState.AddModelError(«», «Login data in incorrect»); //adicionar mensaje de error al model
}
}
return View(user);
}

/// <summary>
/// Realizar el llamado de la vista que contiene la GUI, para registrarse en el sistema
/// </summary>
/// <returns></returns>
public ActionResult Registration()
{
return View();
}

/// <summary>
/// Verificar los datos suministrados por el usuario al realizar la petición Post de envió de información
/// mediante la GUI para crear un nuevo usuario en el sistema
/// </summary>
/// <param name=»user»></param>
/// <returns></returns>
[HttpPost]
public ActionResult Registration(Models.UserModel user)
{
if (ModelState.IsValid )
{
using (var db = new MainDbContext()) //crear objeto con referencia a la base de datos para crear el nuevo usuario
{
var sysUser = db.SystemUsers.Create();
sysUser.Email = user.Email;
sysUser.Password = user.Password;
sysUser.PasswordSalt = user.Password;
sysUser.UserId = Guid.NewGuid();

db.SystemUsers.Add(sysUser);
db.SaveChanges();
return RedirectToAction(«Index», «Home»);
}
}
else
{
ModelState.AddModelError(«», «Login data is incorrect.»); //adicionar mensaje de error al model
}
return View();
}

/// <summary>
/// Cerrar sesión del usuario autenticado
/// </summary>
/// <returns></returns>
public ActionResult LogOut()
{
FormsAuthentication.SignOut();
return RedirectToAction(«Index»,»Home»);
}

/// <summary>
/// Metodo para validar el email y password del usuario, realiza la consulta a la base de datos
/// </summary>
/// <param name=»Email»>Email ingresado</param>
/// <param name=»password»>Password ingresado</param>
/// <returns>
/// True:Usuario valido
/// False Usuario Invalido
/// </returns>
private bool Isvalid(string Email, string password)
{
bool Isvalid = false;
using (var db = new MainDbContext())
{
var user = db.SystemUsers.FirstOrDefault(u => u.Email == Email); //consultar el primer registro con los el email del usuario
if (user !=null)
{
if (user.Password == password) //Verificar password del usuario
{
Isvalid = true;
}
}
}
return Isvalid;
}
}


GENERAR LAS VISTAS DE USUARIO

En el archivo Controllers/UserController.cs,  para los controladores de public ActionResult Index(), public ActionResult logIn(), public ActionResult Registration() y public ActionResult LogOut(), se genera las respectivas vistas seleccionando con clic derecho sobre index()|logIn()|Registration()|LogOut()|/Agregar vista

Vista Index() User Vista logIn() User
 vistaU_1  vistaU_2
Vista Registration() User Vista LogOut() User
 vistaU_3  vistaU_4

Las respectivas vistas de usuario se agregan a la carpeta Views,

vistaU


Método validar usuario

A través del método privado Isvalid(string Email, string password), que se encuentra en el archivo  Controllers/USerController.css, se valida los datos ingresados por el usuario: email y password. El método retorna un valor boleano que solo será verdadero si al consultar en la base de datos encuentra el  Email y su respectivo Password, en caso contrario retorna un valor Falso

private bool Isvalid(string Email, string password)
{
bool Isvalid = false;
using (var db = new MainDbContext())
{
var user = db.SystemUsers.FirstOrDefault(u => u.Email == Email); //consultar el primer registro con el email del usuario
if (user !=null)
{
if (user.Password == password) //Verificar password del usuario
{
Isvalid = true;
}
}
}
return Isvalid;
}


MODIFICAR LAS VISTAS 

Página de diseño maestra: Se encuentra en la Views/Shared, se utiliza como plantilla base que permite definir el mismo estilo que podrá ser usado por las demás vistas.

A través de esta vista para el ejercicio se encuentran los enlaces para Registrar, Autenticarse y finalizar sesión. Todas las vistas creadas hacen uso de esta página maestra

Views/Shared/_Layout.cshtml
Código Interfaz Resultante
<!–DOCTYPE html>
<head>
<meta charset=»utf-8″ />
<meta name=»viewport» content=»width=device-width» />
<title>@ViewBag.Title</title>
@Styles.Render(«~/Content/css»)
@Scripts.Render(«~/bundles/modernizr»)
</head>
<body>
728ea7;»>
@if (Request.IsAuthenticated)
{
//Se visualiza cuando el usuario se encuentra autenticado en el sistema
<strong>@Html.Encode(User.Identity.Name) </strong>
@Html.ActionLink(«Log Out»,»LogOut»,»User»)
}
else
{
@Html.ActionLink(«Register», «Registration», «User»)
<span>|</span>
@Html.ActionLink(«Log In», «logIn», «User»)
}
</div>
@RenderBody()
@Scripts.Render(«~/bundles/jquery»)
@RenderSection(«scripts», required: false)
</body>
</html>
 maestra

Página logIn:

  • Se encuentra en la Views/User, se utiliza para ingresar los datos de email, Password y autenticarse en el sistema.
  • Muestra los mensajes de error de acuerdo a la definición realizada en el modelo de datos
Views/User/logIn.cshtml
Código Interfaz Resultante
<!–Referencia del modelo de usuario –>
@model MvcLogin.Models.UserModel
@{
    ViewBag.Title = «LogIn»;
    Layout = «~/Views/Shared/_Layout.cshtml»;
}
@using (Html.BeginForm())
{
    @Html.ValidationSummary(true, «Login fallido,verificar los datos.»);
    <div>
        <fieldset>
            <legend>Login Form</legend>
            <div>@Html.LabelFor(u => u.Email ) </div>
            <div>
                @Html.TextBoxFor(u=> u.Email)
                @Html.ValidationMessageFor(u => u.Email)
            </div>
           
            <div>@Html.LabelFor(u=> u.Password ) </div>
            <div>
                @Html.PasswordFor(u=> u.Password)
                @Html.ValidationMessageFor(u=> u.Password)
            </div>
            <input type=»submit» value=»Ingresar» />
        </fieldset>
    </div>
}

logIn_1logIn_2

Página Registrar:

  • Se encuentra en la Views/User, se utiliza para adicionar nuevos usuarios y lograr autenticarse en el sistema.
  • Muestra los mensajes de error de acuerdo a la definición realizada en el modelo de datos
Views/User/Registration.cshtml
Código Interfaz Resultante
<!–Referencia del modelo de usuario –>
@model MvcLogin.Models.UserModel
@{
ViewBag.Title = «Register»;
Layout = «~/Views/Shared/_Layout.cshtml»;
}
<h2>Registration</h2>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true, «Create user Fail, check your Fields»);
<div>
<fieldset>
<legend>Login Form</legend>
<div>@Html.LabelFor(u => u.Email ) </div>
<div>
@Html.TextBoxFor(u=> u.Email)
@Html.ValidationMessageFor(u => u.Email)
</div>
<div>@Html.LabelFor(u=> u.Password ) </div>
<div>
@Html.PasswordFor(u=> u.Password)
@Html.ValidationMessageFor(u=> u.Password)
</div>
<input type=»submit» value=»Create user» />
</fieldset>
</div>
}
 registration_1registration_2

Fuentes del proyecto

comentarios
  1. Adam Colorado dice:

    Hola muy buen post , tengo un problema trate de hacerlo mismo pero al validar el login no me aparece el nombre en el layout @Html.Encode(User.Identity.Name)
    puedes ayudarme o compartir el proyecto talvez estoy haciendo algo mal.

Deja un comentario