public ActionResult Login(string txtLogin, string txtPassword) { SecurityServices serv = new SecurityServices(); Usuario user; ActionResult result = new EmptyResult(); try { user = serv.Login(txtLogin, txtPassword); if (user != null) { // Opcion 1: terminamos aca y no pedimos perfil // result = View("LoginOK", user); // TODO acomodar autenticacion para que no se repita el codigo // Opcion 2: redirigimos a otra vista que nos permite elegir el perfil (salvo que tenga un unico perfil...) if (user.Perfiles.Count > 1) { result = View("PerfilSelect", user); } else { // Guardamos los datos de sesion en el "contexto" de la sesion establecida (similar al Context que usamos en WPF) // Session["SESION_USER"] = serv.CrearSesion(user, user.Perfiles.Single()); FormsAuthentication.SetAuthCookie(user.Login, false); string redirectUrl = FormsAuthentication.GetRedirectUrl(user.Login, false); if (redirectUrl == "/" || string.IsNullOrEmpty(redirectUrl)) { // creamos una nueva vista strong-typed para incorporar la Sesion result = View("LoginOK_v2", Session["SESION_USER"] as Sesion); } else { result = new RedirectResult(redirectUrl); } } } else { // TODO: armar paginas de error para los casos de credenciales incorrectas o excepcion // TODO: y un controlador que ademas realice el log del problema? // result = new HttpUnauthorizedResult("Credenciales incorrectas"); } } catch (Exception ex) { // redireccionar a una pagina de error!! result = new HttpUnauthorizedResult("Estas al horno!!!"); } return result; }
public LoginViewModel(Action<ActionRequest> notify) { _notify = notify ?? delegate(ActionRequest r) { }; ComandoIngresar = new ComandoSimple(() => { Debug.WriteLine("Llamar a Login Usuario {0} , Pass: {1}", Login, Password); SecurityServices srv = new SecurityServices(); try { if ((Usuario = srv.Login(Login, Password)) != null) { Perfiles = new ObservableCollection<Perfil>(Usuario.Perfiles); PerfilSeleccionado = Perfiles[0]; _notify(ActionRequest.CloseOK); } } catch (OMBSecurityException ex) { OnLoginError(ex.Message); } }, IsValid); ComandoIngresarPerfil = new ComandoSimple(() => { SecurityServices srv = new SecurityServices(); srv.CrearSesion(Usuario, PerfilSeleccionado); Debug.WriteLine("Perfil Seleccionado: {0}", (object)_perfil.Descripcion); _notify(ActionRequest.CloseOK); }); ComandoCancelar = new ComandoSimple(() => _notify(ActionRequest.CloseCancel)); PerfilSeleccionado = null; }