none
HttpContext.Current.User.Identity.IsAuthenticated siempre es false RRS feed

  • Pregunta

  • Hola a todos:

     Estoy tratando de recuperar el usuario logeado actualmente en mi sistema pero por alguna razón la propiedad IsAuthenticated siempre me retorna un false:

     Estoy usando esta clase para fijar el usuario al contexto, la cual esta en un proyecto del tipo Biblioteca de clases:

    namespace Helper
    {
        public static class SessionHelper
        {
            public static bool ExistUserInSession()
            {
                return HttpContext.Current.User.Identity.IsAuthenticated;
            }
    
            public static void DestroyUserSession()
            {
                FormsAuthentication.SignOut();
            }
            public static int GetUser()
            {
                int user_id = 0;
                if (HttpContext.Current.User != null && HttpContext.Current.User.Identity is FormsIdentity)
                {
                    FormsAuthenticationTicket ticket = ((FormsIdentity)HttpContext.Current.User.Identity).Ticket;
                    if (ticket != null)
                    {
                        user_id = Convert.ToInt32(ticket.UserData);
                    }
                }
                return user_id;
            }
            public static void AddUserToSession(string id)
            {
                bool persist = true;
                var cookie = FormsAuthentication.GetAuthCookie("usuario", persist);
    
                cookie.Name = FormsAuthentication.FormsCookieName;
                cookie.Expires = DateTime.Now.AddMonths(3);
    
                var ticket = FormsAuthentication.Decrypt(cookie.Value);
                var newTicket = new FormsAuthenticationTicket(ticket.Version, ticket.Name, ticket.IssueDate, ticket.Expiration, ticket.IsPersistent, id);
    
                cookie.Value = FormsAuthentication.Encrypt(newTicket);
                HttpContext.Current.Response.Cookies.Add(cookie);
            }
        }
    }

     Después de un validación de usuario y contraseña utilizo el método AddUserToSession para fijar el usuario a la sesión, si depura esas lineas puedo ver como se genera la cookie y el ticket correctamente.

    Esta es la parte del Action donde mando a llamar al método mencionado:

    f (ModelState.IsValid)
            {
                _usuarioViewModel.Email = model.Email;
                _usuarioViewModel.Password = model.Password;
    
                var usuarioDomain = Mapper.Map<UsuarioViewModel, Usuario>(_usuarioViewModel);
                UsuarioDto usuarioDtoDomain = _userRepository.Login(usuarioDomain);
    			
    	    //Si la autenticacion no fue exitosa la capa correspondiente regresa un CustomException
                if (usuarioDtoDomain != null)
                {
                    SessionHelper.AddUserToSession(usuarioDtoDomain.UsuarioId.ToString());
    
                    return View("~/views/home/index.cshtml");
                }

    Bien, hasta aquí todo va bien, el tema ocurre cuando pregunto por el usuario autenticado, desde la vista para mostrar el nombre de usuario:

     @if (SessionHelper.ExistUserInSession())
     {
         <div class="row">
             <div class="col-xs-12 text-center well">
                 Bienvenido, <b>@FrontUser.Get().Email</b> [<a href="~/home/salir">Finalizar sesión</a>]
             </div>
         </div>
     }
     

     Como ven SessionHelper es una clase estática pero por alguna razón al llamar a la función:

    public static bool ExistUserInSession()
    {
        return HttpContext.Current.User.Identity.IsAuthenticated;
    }

     Este siempre me regresa false.

     Esta es la sección correspondiente del web.config.

      <system.web>
        <compilation debug="true" targetFramework="4.6" />
        <httpRuntime targetFramework="4.6" />
        <authentication mode="Forms">
          <forms name="prueba" cookieless="UseCookies" protection="All" />
        
        </authentication> 
      </system.web>  

     Si alguien con mas experiencia puede ver algo incorrecto mucho le agradeceré si me informa u ofrece algún tip para dar con el origen de mi problema.


    Saludos desde Monterrey, Nuevo León, México!!!


    lunes, 11 de abril de 2016 2:28

Todas las respuestas

  • Hola:

     Hice una prueba con un proyecto nuevo solo que esta ves sin seleccionar ningún sistema de autenticacion al momento de crear mi proyecto, y funciona, puedo agregar el usuario Id a la sesión y puedo recuperarlo en otra vista sin problemas.

     Cuando cree mi proyecto actual seleccione "Individual User Accounts" supongo que de alguna manera al seleccionar esta opción me esta bloqueando lo anteriormente descrito.


    Saludos desde Monterrey, Nuevo León, México!!!

    jueves, 14 de abril de 2016 17:16