2010-01-29 11 views
9

Estoy utilizando Forms Authentication y tengo la página de inicio de sesión básica y la predeterminada.FormsAuthentication Membership.GetUser() Null

Cuando estoy en la página de inicio de sesión, y llamo a SignOn esto funciona simplemente genial. Sin embargo, cuando todavía estoy en la página de Inicio de sesión, el Membership.GetUser() devuelve nulo. Cuando me redirecciona a mi página predeterminada, el Membership.GetUser() devuelve mi información de usuario.

¿Hay alguna manera de obtener este método para devolver a mi usuario mientras todavía está en la página de inicio de sesión. He leído en todo google que otros tienen problemas similares en los que solo funcionará una vez que lo redireccionen.

Deseo saber si necesita más información.

Aquí es un simple fragmento de código de lo que estoy utilizando para verificar que la información que se está creando:

bool authenticated = User.Identity.IsAuthenticated; 
      string username = User.Identity.Name; 

      MembershipUser user = Membership.GetUser(); 

me puso este código tanto en la página de inicio de sesión y la página por defecto en el código detrás y sólo la página predeterminada tiene valores y muestra que está autenticada después de que se ejecuta el proceso de autenticación.

Respuesta

11

Esto puede deberse a que permite usuarios anónimos en su página de inicio de sesión. Por lo tanto, el navegador no se molesta en enviar más información a esta página de la necesaria.

+0

Esto tiene sentido en realidad. Dado que la página de inicio de sesión es la única página permitida para usuarios anónimos, el sistema no puede extraer la información de la membresía hasta que esté en una página que requiera que el usuario autenticado ... muy interesante ... – CodeLikeBeaker

+3

Exactamente. ¿Cómo se puede saber quién está conectado antes de iniciar sesión? – Greg

+0

Bien, gracias por la información. Estoy bastante seguro de que esto es todo. Lo aprecio. – CodeLikeBeaker

11

Otra cosa a intentar es el siguiente código:

MembershipUser user = Membership.GetUser(username); 
GenericIdentity identity = new GenericIdentity(user.UserName); 
RolePrincipal principal = new RolePrincipal(identity); 
System.Threading.Thread.CurrentPrincipal = principal; 
HttpContext.Current.User = principal; 
+0

¡Brillante! Esto funciona muy bien para hacer que el usuario que acaba de validar en LogOn el usuario actual. Puse esto justo después de 'if (Membership.ValidateUser (model.UserName, model.Password) ...'. ¡Gracias! – tig

2

yo estaba en la misma situación, aquí es lo que funcionó para mí en MVC 4 .NET 4.5.

Membership.GetUser(HttpContext.Current.User.Identity.Name) 
2

Tuve un problema similar y el problema resultó ser que me faltaba el método de autenticación = formulario en la configuración web.

<system.web> 
    <authentication mode="Forms"/> 
    .... 

No se olvide que uno (me la migración de un sitio de memoria mayor para PEA)

+0

Esto solucionó mi problema, solo tomó 4 horas para rastrearlo así que ¡gracias! –

+0

Gracias @Etienne:) –

0

tuve este problema y nos pareció que era debido a tener múltiples proveedores de pertenencia, así que en vez de

Membership.GetUser() 

puede probar

Membership.Providers["MyMembershipProvider"].GetUser() 

o más específicamente

Membership.Providers["MyMembershipProvider"].GetUser(LoginCtrl.UserName, false) 
Cuestiones relacionadas