2009-03-02 6 views
4

Ich verwende FormsAuthentication für eine ASP.NET-Site mit einer Masterseite, die den aktuell angemeldeten Benutzer Page.User.Identity.Name anzeigt.Programmgesteuert aktualisieren/aktualisieren HttpContext.User

Sie können ihren Benutzernamen in ihren Einstellungen ändern, und wenn dies der Fall ist, aktualisiere ich ihr Cookie für sie, so dass sie sich nicht mit einem Postback abmelden müssen.

FormsAuthentication.SignOut(); 
FormsAuthentication.SetAuthCookie(username, false); 

ich wahrscheinlich ziemlich Nit-picky ist, aber nachdem sie ihren Benutzernamen die Seite noch Master ändern zeigt ihren ursprünglichen Benutzernamen, bis sie eine andere Seite neu zu laden oder laden.

Gibt es eine Möglichkeit, den aktuellen Page.User programmatisch zu aktualisieren, damit der neue Benutzername während desselben Postbacks angezeigt werden kann?

Antwort

1

Sie könnten eine Instanz Ihrer Masterseitenklasse erstellen und die Eigenschaft, die Sie für den Benutzernamen festlegen, öffentlich machen, sodass Sie diese Eigenschaft direkt nach Ihrem FormsAuthentication-Code festlegen können.

6

Obwohl MasterMax Vorschlag ist, was ich tun würde, können Sie die Page.User über HttpContext.Current.User aktualisieren.

Wenn Sie die Benutzerrollen kennen (oder Sie verwenden keine Rolle basierte Autorisierung), können Sie die Vorteile der System.Security.Principal.GenericPrincipal Klasse nehmen:

string newUsername = "New Username"; 
string[] roles = new string[] {"Role1", "Role2"}; 

HttpContext.Current.User = 
    new GenericPrincipal(new GenericIdentity(newUserName), roles);