// Por cuestiones de seguirdad, TIENE que ser privado. private void cambiar_perfil(string perfil_elegido) { // Si es un distinto perfil, cambie los permisos. if (IdentidadManager.obtener_perfil_actual() != perfil_elegido) { string correo_actual = IdentidadManager.obtener_correo_actual(); var identidad = new ClaimsIdentity ( new[] { new Claim(ClaimTypes.Email, correo_actual), new Claim(ClaimTypes.Role, perfil_elegido) }, DefaultAuthenticationTypes.ApplicationCookie ); AuthController.eliminar_privilegios(this); Thread.CurrentPrincipal = new ClaimsPrincipal(identidad); HttpContext.GetOwinContext().Authentication.SignIn(new AuthenticationProperties { IsPersistent = false }, identidad); Session[correo_actual] = new IdentidadManager(); } }
// Devuelve los perfiles del usuario loggeado. public static ICollection <string> ObtenerPerfiles() { Opiniometro_DatosEntities db = new Opiniometro_DatosEntities(); string correo_autenticado = IdentidadManager.obtener_correo_actual(); ICollection <String> perfiles; perfiles = db.ObtenerPerfilUsuario(correo_autenticado).ToList(); return(perfiles); }
public ActionResult Login(Usuario usuario) { eliminar_privilegios(this); ObjectParameter exito = new ObjectParameter("Resultado", 0); bool error_conexion = false; try { db.SP_LoginUsuario(usuario.CorreoInstitucional, usuario.Contrasena, exito); } catch (EntityException) { error_conexion = true; exito.Value = false; } if (IdentidadManager.obtener_correo_actual() != null) // Si esta autenticado { return(RedirectToAction("Index", "Home")); } else if ((bool)exito.Value == true) // Si se pudo autenticar (correo y contrasenna validos). { // Note que si se cambia la contrasenna no se crea ninguna sesion. var recuperar_contrasena = db.Usuario.Where(m => m.CorreoInstitucional == usuario.CorreoInstitucional).ToList(); if (recuperar_contrasena.ElementAt(0).RecuperarContrasenna == true) { Session["recuperar"] = usuario.CorreoInstitucional; return(RedirectToAction("CambiarContrasenna")); } else { crear_sesion(usuario.CorreoInstitucional); return(RedirectToAction("Cambiar", "Perfil")); } } else // Si hay error en la autenticacion { // Desplegar mensaje de error personalizado. string mensaje_error = ""; if (error_conexion == true) { mensaje_error = "Error de conexión al servidor"; } else { mensaje_error = "Usuario o contraseña inválidos"; } ModelState.AddModelError("ErrorLogin", mensaje_error); // Devolverse a la misma pagina de Login informando de que hay un error de autenticacion. return(View(usuario)); } }
public ActionResult Index() { DateTime fecha = DateTime.Now; var modelo = new CursosMatriculadoModel { gruposMatriculado = ObtenerGrupoMatriculado(obtenerCedulaEstLoggeado(IdentidadManager.obtener_correo_actual()), ciclo(fecha.Month), fecha.Year) }; var grupo = modelo.gruposMatriculado.ToList().ElementAt(0); Debug.WriteLine("\n\nEn EstudiantesGruposMatriculado: " + grupo.anoGrupo + " " + grupo.semestreGrupo + " " + grupo.siglaCursoMatriculado + " " + grupo.numGrupo + ".\n"); return(View("Index", modelo)); }
public static void eliminar_privilegios(Controller controlador) { // En caso de que no exista sesion, no tiene por que hacer algo. if (IdentidadManager.verificar_sesion(controlador)) { string correo = IdentidadManager.obtener_correo_actual(); // Obtengo el correo para obtener la sesion. ((IdentidadManager)controlador.Session[correo]).limpiar_permisos(); // Limpio los permisos. controlador.Session.Remove(correo); // Remuevo la sesion. } // Elimino cookies. controlador.Request.GetOwinContext().Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ApplicationCookie); }
/* GET: Auth/Login * EFECTO: retornar vista parcial, la cual implica que no se despliega _Layout de la carpeta Shared. * REQUIERE: cshtml con el nombre Login. * MODIFICA: n/a */ public ActionResult Login() { // Eliminar el correo de recuperar en caso de que se devuelva al login de haber cambiado la contrasenna. Session.Remove("recuperar"); // Si esta autenticado, redireccione a Home. if (IdentidadManager.obtener_correo_actual() != null && IdentidadManager.verificar_sesion(this) == true) { return(RedirectToAction("Index", "Home")); } // Si no, retorne la vista para el login. else { return(View("Login")); } }
public void obtener_correo_actual_test() { // Mocks necesarios para tener una sesion "de mentira". var mock_controller_contexto = new Mock <ControllerContext>(); var mock_session = new Mock <HttpSessionStateBase>(); var identidad = new ClaimsIdentity( new[] { new Claim(ClaimTypes.Email, "*****@*****.**") }, DefaultAuthenticationTypes.ApplicationCookie); Thread.CurrentPrincipal = new ClaimsPrincipal(identidad); var resultado_correo = IdentidadManager.obtener_correo_actual(); Assert.AreEqual("*****@*****.**", resultado_correo); }