2010-01-29 9 views
9

Ich verwende die Formularauthentifizierung und die grundlegende Anmeldeseite und die Standardseite.FormsAuthentication Membership.GetUser() Null

Wenn ich auf der Anmeldeseite bin, und das SignOn aufrufen funktioniert das einfach super. Wenn ich jedoch noch auf der Anmeldeseite bin, gibt Membership.GetUser() null zurück. Wenn ich auf meine Standardseite umleite, gibt die Membership.GetUser() meine Benutzerinformationen zurück.

Gibt es eine Möglichkeit, ich bekomme diese Methode, um meinen Benutzer zurückgeben, während noch auf der Anmeldeseite. Ich habe über Google gelesen, dass andere ähnliche Probleme haben, wo es nur funktioniert, sobald Sie umleiten.

Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.

Hier ist ein einfacher Code-Schnipsel von dem, was ich, dass die Informationen zu überprüfen, verwende gesetzt werden:

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

      MembershipUser user = Membership.GetUser(); 

habe ich diesen Code sowohl auf die Anmeldeseite und die Standardseite in der Code-behind und nur Die Standardseite enthält Werte und zeigt an, dass sie nach der Ausführung des Authentifizierungsprozesses authentifiziert wird.

Antwort

11

Dies könnte daran liegen, dass Sie anonymen Benutzern auf Ihrer Anmeldeseite erlauben. Daher sendet der Browser keine weiteren Informationen an diese Seite als nötig.

+0

Dies macht eigentlich Sinn. Da die Anmeldeseite die einzige Seite ist, die für anonyme Benutzer zulässig ist, kann das System die Mitgliedschaftsinformationen nicht abrufen, bis es sich auf einer Seite befindet, die den authentifizierten Benutzer erfordert ... sehr interessant. – CodeLikeBeaker

+3

Genau. Wie können Sie wissen, wer eingeloggt ist, bevor sie sich einloggen? – Greg

+0

Okay, danke für die Info. Ich bin mir ziemlich sicher, dass das so ist. Bin dankbar. – CodeLikeBeaker

11

Etwas anderes zu versuchen, ist der folgende Code:

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

Brilliant! Dies funktioniert hervorragend, um den Benutzer, den Sie gerade in LogOn validiert haben, zum aktuellen Benutzer zu machen. Ich setze das direkt nach 'if (Membership.ValidateUser (model.UserName, model.Password) ...'. Danke! – tig

2

ich in der gleichen Situation war, hier ist das, was für mich auf MVC 4.5 .NET 4 gearbeitet.

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

Ich hatte ein ähnliches Problem und das Problem stellte sich heraus, dass ich Authentifizierungsmethode = Formular in der Webkonfiguration fehlte.

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

Vergessen Sie nicht, dass man (ich war ein altes Erbe Site aspnet Migration)

+0

Das sortierte mein Problem - dauerte nur 4 Stunden, um es zu verfolgen, also danke! –

+0

Danke @Etienne:) –

0

ich dieses Problem hatte und fand es aufgrund war mehrere Mitgliedschaftsanbieter zu haben, so dass anstelle von

Membership.GetUser() 

können Sie

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

oder mehr versuchen

speziell
Membership.Providers["MyMembershipProvider"].GetUser(LoginCtrl.UserName, false) 
Verwandte Themen