2009-06-01 5 views
0

In der Authentifizierungssteuerung habe ich die folgende Zeile, um einen Benutzer als authentifiziert im System zu markieren (nach dem Auschecken des Kennworts):Legen Sie die Authentifizierung als wahr für die Ansicht des Steuerelements fest, das die Authentifizierung in ASP.Net ausführt. MVC

FormsAuth.SignIn(userName, rememberMe); 

und wenn ich Redirect, die Standard-Behavior ist, ist alles in Ordnung. Aber wenn ich sofort einen Blick zeigen, auf die üblichen Wege zu prüfen, ob ein Benutzer authentifiziert ist:

Page.User.Identity.IsAuthenticated 
Request.IsAuthenticated 

funktionieren nicht. Sie sagen, der Benutzer ist nicht authentifiziert. Wie kann ich die Authentifizierung sofort aktivieren oder gibt es eine andere Möglichkeit, das zu überprüfen, damit ich herausfinden kann, wann sich der Benutzer gerade angemeldet hat?

Antwort

3

FormsAuth.SignIn ist eine Funktion, die generiert wird, wenn Sie ein neues ASP.NET MVC-Projekt von Visual Studio erstellen.

Diese Funktion ruft einfach FormsAuthentication.SetAuthCookie, die laut der Dokumentation, die Authentifizierung Cookie in der Antwort.

Dies erklärt, warum es funktioniert, wenn Sie umleiten (weil der Client das Cookie in der nachfolgenden Anfrage wiedergeben wird), aber nicht direkt nach dem Anruf.

Umleiten ist der richtige/konventionelle Weg, um dies zu tun, aber wenn Sie unbedingt darauf bestehen, die Authentifizierung vor einer Weiterleitung zu überprüfen, dann könnten Sie ein IsAuthenticated Flag im Sitzungszustand erstellen und sich darauf beziehen.

0

Auf Ihren Controllern sollten Sie in der Lage sein zu prüfen, ob sie authentifiziert sind.

User.Identity.IsAuthenticated; 

ich überprüfen würde, um sicherzustellen, dass Ihre Account richtig die Hauptaufgabe ist das Speichern, wie Sie von Seite zu Seite bewegen.

0

Zusätzlich zur Verwendung von FormsAuth.Signin oder FormsAuthentication.SetAuthCookie können Sie die User.Identity auch manuell in Ihrem Anmeldesteuerelement festlegen, wenn der Anmeldecode ausgeführt wird. Wie oben beschrieben, liegt der Grund daran, dass das FORmsAuth.SignIn einfach das Authentifizierungs-Cookie setzt, das das nächste Mal im Request_OnAuthenticate-Ereignis abgeholt wird. (Die dekodiert einfach den Cookie und setzt die HttpContext.User-Eigenschaft)