public ActionResult Logout(string newUrl) { var browser = Request.Browser; var userAgent = Request.UserAgent; var index = userAgent.IndexOf("("); userAgent = userAgent.Substring(index + 1, userAgent.Length - (index + 1)); index = userAgent.IndexOf(")"); userAgent = userAgent.Substring(0, index); userName = User.Identity.Name; idAUSession = Session.SessionID; idAUsuario = (dbSistema.AspNetUsers.Where(au => au.UserName == userName).FirstOrDefault()).Id; idUsuario = (dbSistema.Usuario.Where(u => u.IdAspNetUser == idAUsuario).FirstOrDefault()).Id; var sesion = dbSistema.Sesion.Where(s => s.IdAspNetSession == idAUSession && s.IdUsuario == idUsuario).FirstOrDefault(); sesion.FechaFin = DateTime.Now; dbSistema.SaveChanges(); //BITACORA var usuarioBitacora = new UsuarioBitacora { Operacion = "Usuarios/Logout", Descripcion = "Cierre de Sesión. Id: " + sesion.Id + ", Navegador: " + browser.Browser + " (" + browser.Type + "), IP: " + Request.UserHostAddress + ", Device: " + userAgent, Tipo = 1, UsuaReg = userName, FechaReg = DateTime.Now }; dbSistema.UsuarioBitacora.Add(usuarioBitacora); dbSistema.SaveChanges(); AuthenticationManager.SignOut(); return(Redirect(newUrl)); }
public ActionResult Login2(string jsonModel) { var browser = Request.Browser; var userAgent = Request.UserAgent; var index = userAgent.IndexOf("("); userAgent = userAgent.Substring(index + 1, userAgent.Length - (index + 1)); index = userAgent.IndexOf(")"); userAgent = userAgent.Substring(0, index); var model = JsonConvert.DeserializeObject <UsrLoginViewModel>(jsonModel); userName = model.Nombre.ToLower(); if (model.Nombre.ToLower() != "sistemas") { userName = model.Empresa.ToLower() + "_" + model.Nombre.ToLower(); } idAUsuario = (dbSistema.AspNetUsers.Where(au => au.UserName == userName).FirstOrDefault()).Id; var usuario = dbSistema.Usuario.Where(u => u.IdAspNetUser == idAUsuario && u.Estado == (int)Estado.Activo).FirstOrDefault(); if (usuario != null) { if (model.Nombre.ToLower() == "sistemas") { var empresa = usuario.UsuarioEmpresa.Select(ue => ue.Empresa) .Where(e => e.DBName == model.Empresa.ToUpper()).FirstOrDefault(); if (empresa == null) { //BITACORA var usuarioBitacora = new UsuarioBitacora { Operacion = "Usuarios/Login", Descripcion = "Inicio de Sesión. Error: Empresa inexistente, Navegador: " + browser.Browser + "(" + browser.Type + "), IP: " + Request.UserHostAddress + ", Device: " + userAgent, Tipo = 0, UsuaReg = userName, FechaReg = DateTime.Now }; dbSistema.UsuarioBitacora.Add(usuarioBitacora); dbSistema.SaveChanges(); return(Json(new { ok = false, message = "Empresa inexistente." })); } } var user = UserManager.Find(userName, model.Contrasenia); if (user != null) { AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie); var identity = UserManager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie); AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = model.OkRecordar }, identity); //SESION idAUSession = Session.SessionID; HttpContext.Session["SESSION_ID"] = idAUSession; var sesion = dbSistema.Sesion.Where(s => s.IdUsuario == usuario.Id) .OrderByDescending(s => s.FechaFin).FirstOrDefault(); if (sesion != null) { if (sesion.IdAspNetSession != idAUSession) { sesion.FechaFin = DateTime.Now; dbSistema.SaveChanges(); //BITACORA var usuarioBitacora = new UsuarioBitacora { Operacion = "Usuarios/Logout", Descripcion = "Cierre de Sesión. Id: " + sesion.Id + ", Navegador: " + browser.Browser + " (" + browser.Type + "), IP: " + Request.UserHostAddress + ", Device: " + userAgent, Tipo = 1, UsuaReg = userName, FechaReg = DateTime.Now }; dbSistema.UsuarioBitacora.Add(usuarioBitacora); dbSistema.SaveChanges(); var sesionEmpresa = sesion.SesionEmpresa.Where(se => se.Activa).FirstOrDefault(); var empresa = sesionEmpresa.Empresa; sesionEmpresa.Activa = false; dbSistema.SaveChanges(); sesion = new Sesion { IdAspNetSession = idAUSession, IdUsuario = usuario.Id, TipoBrowser = browser.Type, Browser = browser.Browser, IpAddress = Request.UserHostAddress, UserAgent = userAgent, ScreenWidth = model.ScreenWidth, ScreenHeight = model.ScreenHeight, IsMobile = model.IsMobile, FechaInicio = DateTime.Now, FechaFin = DateTime.Now }; dbSistema.Sesion.Add(sesion); dbSistema.SaveChanges(); if (empresa.DBName == model.Empresa.ToUpper()) { sesionEmpresa = new SesionEmpresa { IdSesion = sesion.Id, IdEmpresa = empresa.Id, Activa = true }; } else { empresa = usuario.UsuarioEmpresa.Select(ue => ue.Empresa) .Where(e => e.DBName == model.Empresa.ToUpper()).FirstOrDefault(); sesionEmpresa = new SesionEmpresa { IdSesion = sesion.Id, IdEmpresa = empresa.Id, Activa = true }; } dbSistema.SesionEmpresa.Add(sesionEmpresa); dbSistema.SaveChanges(); } else { var sesionEmpresa = sesion.SesionEmpresa.Where(se => se.Activa == true).FirstOrDefault(); sesionEmpresa.Activa = false; dbSistema.SaveChanges(); sesion = new Sesion { IdAspNetSession = idAUSession, IdUsuario = usuario.Id, TipoBrowser = browser.Type, Browser = browser.Browser, IpAddress = Request.UserHostAddress, UserAgent = userAgent, ScreenWidth = model.ScreenWidth, ScreenHeight = model.ScreenHeight, IsMobile = model.IsMobile, FechaInicio = DateTime.Now, FechaFin = DateTime.Now }; dbSistema.Sesion.Add(sesion); dbSistema.SaveChanges(); var empresa = usuario.UsuarioEmpresa.Select(ue => ue.Empresa) .Where(e => e.DBName == model.Empresa.ToUpper()).FirstOrDefault(); sesionEmpresa = new SesionEmpresa { IdSesion = sesion.Id, IdEmpresa = empresa.Id, Activa = true }; dbSistema.SesionEmpresa.Add(sesionEmpresa); dbSistema.SaveChanges(); } } else { sesion = new Sesion { IdAspNetSession = idAUSession, IdUsuario = usuario.Id, TipoBrowser = browser.Type, Browser = browser.Browser, IpAddress = Request.UserHostAddress, UserAgent = userAgent, ScreenWidth = model.ScreenWidth, ScreenHeight = model.ScreenHeight, IsMobile = model.IsMobile, FechaInicio = DateTime.Now, FechaFin = DateTime.Now }; dbSistema.Sesion.Add(sesion); dbSistema.SaveChanges(); var empresa = usuario.UsuarioEmpresa.Select(ue => ue.Empresa) .Where(e => e.DBName == model.Empresa.ToUpper()).FirstOrDefault(); var sesionEmpresa = new SesionEmpresa { IdSesion = sesion.Id, IdEmpresa = empresa.Id, Activa = true }; dbSistema.SesionEmpresa.Add(sesionEmpresa); dbSistema.SaveChanges(); } //BITACORA var usuarioBitacora2 = new UsuarioBitacora { Operacion = "Usuarios/Login", Descripcion = "Inicio de Sesión. Navegador: " + browser.Browser + " (" + browser.Type + "), IP: " + Request.UserHostAddress + ", Device: " + userAgent, Tipo = 1, UsuaReg = userName, FechaReg = DateTime.Now }; dbSistema.UsuarioBitacora.Add(usuarioBitacora2); dbSistema.SaveChanges(); return(Json(new { ok = true, newUrl = model.ReturnUrl })); } //BITACORA var usuarioBitacora3 = new UsuarioBitacora { Operacion = "Usuarios/Login", Descripcion = "Inicio de Sesión. Error: Contraseña incorrecta, Navegador: " + browser.Browser + "(" + browser.Type + "), IP: " + Request.UserHostAddress + ", Device: " + userAgent, Tipo = 0, UsuaReg = userName, FechaReg = DateTime.Now }; dbSistema.UsuarioBitacora.Add(usuarioBitacora3); dbSistema.SaveChanges(); return(Json(new { ok = false, message = "Contraseña incorrecta." })); } //BITACORA var usuarioBitacora4 = new UsuarioBitacora { Operacion = "Usuarios/Login", Descripcion = "Inicio de Sesión. Error: Usuario no válido, Navegador: " + browser.Browser + "(" + browser.Type + "), IP: " + Request.UserHostAddress + ", Device: " + userAgent, Tipo = 0, UsuaReg = userName, FechaReg = DateTime.Now }; dbSistema.UsuarioBitacora.Add(usuarioBitacora4); dbSistema.SaveChanges(); return(Json(new { ok = false, message = "Usuario no válido." })); }