public ActionResult Login(LoginModel u, string returnUrl) { if (ModelState.IsValid) { try { using (_db) { //prueba //revisamos si tiene una pass generica para enviarlo a cambio de contraseña if (_validacion.ValidaAsociados(u.UserName.ToUpper(), u.Password)) { _counter = 0; return(RedirectToAction("ResetContraseña", "Account", new { rt = u.UserName.ToUpper() })); } //si no //encriptamos la contraseña en sha1 var encriptado = _sha.GetSha1(u.Password); //validamos x usuario y contraseña encriptada if (_validacion.ValidaAsociados(u.UserName.ToUpper(), encriptado)) { //revisamos que la cuenta no este bloqueada var sesion = _validacion.Sesion(u.UserName.ToUpper()); //si no esta bloqueada accesa if (sesion == false) { var v = _validacion.Validacion(u.UserName.ToUpper(), encriptado); Session.Add("UserID", v.id.ToString()); Session.Add("UserFullName", v.IdEmpleado); FormsAuthentication.SetAuthCookie(u.UserName.ToUpper(), false); if (!string.IsNullOrEmpty(returnUrl)) { //si entra a la sesion reiniciamos contador _counter = 0; return(Redirect(returnUrl)); } _counter = 0; return(RedirectToAction("Index", "Home")); } //si esta bloqueada regresamos a la vista y mandamos mensaje de notificacion else { ViewBag.Error = _mensajes.CuentBloqueada(_counter); } } //validacion mensaje ViewBag.Error = _mensajes.AlertaContraseña(); /////////// /// Intentos restantes /// var bloqueado = _validacion.Sesion(u.UserName.ToUpper()); if (bloqueado == false) { //revisamos si existe el usuario para los intentos restantes antes de bloquear usuario if (_validacion.ValidaUsuario(u.UserName.ToUpper())) { //tiliza el bloqueo de exclusión mutua de un objeto e iniciamos contador lock (LockObj) { _counter++; } //si los intentos llegan al limite mandamos bandera para bloquear cuenta if (_counter == 3) { _validacion.UpdateRegistro(u.UserName.ToUpper()); ViewBag.Error = _mensajes.CuentBloqueada(_counter); } else { ViewBag.Error = null; ViewBag.Info = _mensajes.CredencialesInvalidas(_counter); } } } else { ViewBag.Error = _mensajes.CuentBloqueada(_counter); } } } catch (Exception ex) { Console.WriteLine(ex.ToString()); ViewBag.Error = ex.ToString(); } } ModelState.Clear(); return(View()); }