c# asp.net asp.net-membership asp.net-4.5

c# - User.Identity.IsAuthenticated es falso después de iniciar sesión correctamente



asp.net asp.net-membership (4)

En mi caso de entorno de desarrollo, la propiedad requireSSL se estableció en true, solucioné el problema cambiándolo a requireSSL = false

Necesito obtener el UserId Guid directamente después de un inicio de sesión exitoso. El siguiente código no funciona:

if (Membership.ValidateUser(txtUsername.Value, txtPassword.Value)) { FormsAuthentication.SignOut(); FormsAuthentication.SetAuthCookie(txtUsername.Value, true); if (HttpContext.Current.User.Identity.IsAuthenticated) { // doesn''t run Guid puk = (Guid)Membership.GetUser().ProviderUserKey; } }

El siguiente código funciona:

if (Membership.ValidateUser(txtUsername.Value, txtPassword.Value)) { FormsAuthentication.SignOut(); FormsAuthentication.SetAuthCookie(txtUsername.Value, true); MembershipUser user = Membership.GetUser(txtUsername.Value); if (user != null) { Guid puk = (Guid)user.ProviderUserKey; } }

¿Por qué pasó esto? ¿Hay algo más que hacer además de SetAuthCookie ?


Porque cuando llamas a FormsAuthentication.SetAuthCookie(txtUsername.Value, true); Usted almacena la clave en las cookies del cliente. Para esto necesitas hacer una respuesta al usuario. Y para que HttpContext.Current.User.Identity se complete con una cookie, necesita una solicitud más.

En resumen, su esquema se ve así:

  1. El cliente envía su nombre de usuario y contraseña.

  2. El servidor lo consigue y lo comprueba. Si son válidos, el servidor envía el encabezado Set-Cookie al cliente.

  3. El cliente lo recibe y lo almacena. Para cada solicitud el cliente envía las cookies al servidor.

ACTUALIZACIÓN para @Jake

Agregando un ejemplo de configuración de User en HttpContext

var identity = new System.Security.Principal.GenericIdentity(user.UserName); var principal = new GenericPrincipal(identity, new string[0]); HttpContext.Current.User = principal; Thread.CurrentPrincipal = principal;

Tenga en cuenta que puede crear su clase principal personalizada GenericPrincipal de GenericPrincipal o ClaimsPrincipal


Probé todas las soluciones anteriores, pero lo que resuelve mi problema fue comentar esto en web.config

<modules> <remove name="FormsAuthentication"/> </modules>


Yo también tuve el mismo problema. Olvidé configurar la configuración web.config.

Tal vez te perdiste también.

<system.web> <authentication mode="Forms"> <forms loginUrl="~/user/login" timeout="1000" name="__Auth" /> </authentication> </system.web>