WebSecurity.CurrentUserName und User.Identity.Name sind nach dem Anmelden ungültig

8

Ich gebe an, SimpleMembership für meine ASP.Net MVC 4 Seite herauszufinden. Ich habe UserProfile um eine benutzerdefinierte Eigenschaft, AccountTypeId, erweitert. Ich habe die Datenbanktabelle mit der erweiterten Eigenschaft aktualisiert und kann Daten bei der Registrierung in der Datenbank speichern. Ich bin ein wenig verwirrt darüber, wie man Daten über den Benutzer abrufen kann, nachdem er sich eingeloggt hat.

In meinem Account-Controller habe ich eine Login-Aktion, die bei der Anmeldung eines Benutzers gepostet wird. Hier ist mein Code:

%Vor%

WebSecurity.CurrentUserName und User.Identity.Name sind beide leere Zeichenfolgen, jedoch kann ich die UserId mit WebSecurity.GetUserId (model.UserName) abrufen und kann daher die Benutzerdaten abrufen, und ich kann accountTypeId abrufen.

Was seltsam ist, wird User.Identity.Name auf meiner Seite angezeigt, wenn es von einer .cshtml-Seite aufgerufen wird, nachdem der Benutzer auf die Zielseite umgeleitet wurde. Also, irgendwo zwischen der Login-Aktion meines Controllers und der Zielseite, wird User.Identity mit Daten gesetzt.

Ich gehe davon aus, dass WebSecurity seit der WebSecurity.Login-Überprüfung Informationen über den angemeldeten Benutzer enthält, aber das scheint nicht so zu sein.

Was vermisse ich?

    
Tom Schreck 28.09.2012, 22:01
quelle

1 Antwort

9

Der Benutzername wird in einen Cookie geschrieben. Damit Cookie-Daten verfügbar sind, müssen sie in die Antwort eingegeben und zurück an den Browser gesendet werden. Bei der nächsten Anforderung wird der Cookie-Wert gelesen und zum Auffüllen der User.Identity.Name -Eigenschaft verwendet.

Mit anderen Worten, die User.Identity.Name -Eigenschaft sollte eine leere Zeichenfolge sein, bis nach Ihrem Redirect-Aufruf. Dies ist der Zweck der Umleitung nach dem Anmelden: um den Cookie in den Browser zu schreiben, so dass nachfolgende Anfragen den Benutzer als angemeldet behandeln.

    
danludwig 29.09.2012, 15:17
quelle