How to set Thread.CurrentPrincipal für den Einsatz in der gesamten Anwendung?

In einem ASP.net Anwendung ich bin mit einem Login-Steuerelement mit einem benutzerdefinierten Mitgliedschaftsanbieter, der ich schrieb. Was ich will zu tun ist, um Thread.CurrentPrincipal auf meine benutzerdefinierte Principal-Objekt, nur nachdem der Benutzer authentifiziert ist.

Ich bin mit dem setter: Thread.CurrentPrincipal ist, und er legt die Hauptsache für mich ist, aber auf all den daraus resultierenden threads in diesem CurrentPrincipal ist überschrieben mit den default ein.

Hier ist mein code für die Authentifizierung Ereignis des Login-Steuerelements:

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
    {
        string username = Login1.UserName;
        string password = Login1.Password;

        if (Membership.ValidateUser(username, password))
        {
            var login = sender as Login;
            var phoenixIdentity = new PhoenixIdentity("B", "Forms" , true);
            var principal = new PhoenixPrincipal(phoenixIdentity);

            Thread.CurrentPrincipal = principal;
            AppDomain.CurrentDomain.SetThreadPrincipal(principal);

            HttpContext.Current.User = principal;

            e.Authenticated = true;
        }
    }

Zum Beispiel vorstellen, dass ich mich anmelden mit dem Benutzernamen Ein, geht alles gut... die Validierung geht, aber ich fest die Benutzer mit dem Benutzernamen B im Identity-Objekt, das gesetzt ist, um die Hauptsache, die ich als CurrentPrincipal Objekt.

Wenn ich überprüfen, welche Benutzer auf die CurrentPrincipal Identität am Ende dieser Methode, Sie sagt, es Benutzer B Aber wenn ich laden einer anderen Seite und dann prüfen, welcher die Identität des CurrentPrincipal ist, es sagt, es ist Benutzer a

So, wie kann ich mein CurrentPrincipal Objekt persistent sein, die in allen anderen threads, und wo/Wann wird das Login-Steuerelement legen Sie die CurrentPrincipal Objekt von Thread?

Was machst du? Sie wollen jeder, um zu ermitteln, wie der erste Benutzer eingeloggt ist? Sie müssen verstehen, die Mechanismen der web-Anwendung Authentifizierung und Autorisierung, die Verwendung von cookies, etc. Sie können nicht von einem Prinzipal an alle multiuser-app-threads.
Natürlich nicht. Vielleicht wollte ich nicht Ausdrücken, mich klar genug.

InformationsquelleAutor Goran | 2009-08-31

Schreibe einen Kommentar