예제 #1
0
        public ActionResult Login(LoginViewModel model, string returnUrl)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    ModelState.AddModelError("", "Usuario o Password Incorrectos");
                    return(View());
                }
                else
                {
                    clsUsuario Objusuario = new clsUsuario();

                    var usuario = Objusuario.ConsultarUsuario1(model.Usuario, Seguridad.Encriptar(model.Password)).Where(x => x.estado == true);

                    int Rol    = Objusuario.ConsultarRolUsuario(model.Usuario);
                    int estado = Objusuario.ConsultarEstadoUsuario(model.Usuario);
                    if (estado == 1)
                    {
                        if (usuario.Count() > 0)
                        {
                            Session["US"] = model.Usuario;
                            Session["PW"] = model.Password;

                            if (Rol.Equals(1))
                            {
                                Session["ROLES"] = "Admin";
                            }

                            if (Rol.Equals(2))
                            {
                                Session["ROLES"] = "Regular";
                            }

                            if (Rol.Equals(3))
                            {
                                Session["ROLES"] = "Bodega";
                            }

                            string baseUrl = ConfigurationManager.AppSettings["URL_API"];

                            //crea el el encabezado
                            HttpClient client = new HttpClient();
                            client.BaseAddress = new Uri(baseUrl);
                            var contentType = new MediaTypeWithQualityHeaderValue("application/json");
                            client.DefaultRequestHeaders.Accept.Add(contentType);

                            Usuario userModel = new Usuario();
                            userModel.UserName = model.Usuario;
                            userModel.Password = Seguridad.Encriptar(model.Password);

                            string stringData  = JsonConvert.SerializeObject(userModel);
                            var    contentData = new StringContent(stringData, System.Text.Encoding.UTF8, "application/json");

                            HttpResponseMessage response = client.PostAsync("/api/login/authenticate", contentData).Result;
                            var stringJWT = response.Content.ReadAsStringAsync().Result;

                            JWT jwt = new JWT {
                                Token = stringJWT.Replace("\"", "")
                            };

                            //Aca se crea la sesion
                            Session["token"] = jwt.Token;
                            Session["US"]    = model.Usuario.ToUpper();

                            string userData = "Datos específicos de aplicación para este usuario.";

                            FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
                                                                                             model.Usuario.ToUpper(),
                                                                                             DateTime.Now,
                                                                                             DateTime.Now.AddMinutes(30),
                                                                                             model.RememberMe,
                                                                                             userData,
                                                                                             FormsAuthentication.FormsCookiePath);

                            // Encryptar el ticket.
                            string encTicket = FormsAuthentication.Encrypt(ticket);

                            // Crea la cookie.
                            Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));

                            if (!string.IsNullOrEmpty(returnUrl))
                            {
                                return(Redirect(returnUrl));
                            }
                            else
                            {
                                return(RedirectToAction("Index", "Home"));
                            }
                        }
                        else
                        {
                            ModelState.AddModelError("Error de Autenticación", "Usuario o Contaseña Invalida");
                        }
                    }
                    else
                    {
                        ModelState.AddModelError("Error de Autenticación", "El usuario ingresado está deshabilitado");
                    }
                }
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("Error de Autenticación", "Usuario o Contaseña Invalida");
            }
            return(View(model));
        }