Ich erstelle eine einseitige Anwendung und habe ein Problem mit Anti-Fälschungs-Token.
Ich weiß, warum das Problem auftritt. Ich weiß nur nicht, wie ich es beheben soll.
Ich erhalte die Fehlermeldung, wenn Folgendes passiert:
- Nicht angemeldeter Benutzer lädt einen Dialog (mit einem generierten Fälschungsschutz-Token).
- Benutzer schließt den Dialog
- Benutzer meldet sich an
- Der Benutzer öffnet den gleichen Dialog
- Der Benutzer sendet das Formular im Dialog
Anti-Fälschungs-Token ist für Benutzer "" gedacht, aber der aktuelle Benutzer ist "Benutzername".
Der Grund dafür ist, dass meine Anwendung zu 100% einseitig ist. Wenn sich ein Benutzer erfolgreich über einen Ajax-Beitrag bei anmeldet, schalte /Account/JsonLogin
ich einfach die aktuellen Ansichten mit den vom Server zurückgegebenen "authentifizierten Ansichten" aus, lade sie jedoch nicht neu Seite.
Ich weiß, dass dies der Grund ist, denn wenn ich die Seite zwischen den Schritten 3 und 4 einfach neu lade, liegt kein Fehler vor.
Es scheint also, dass @Html.AntiForgeryToken()
im geladenen Formular immer noch ein Token für den alten Benutzer zurückgegeben wird, bis die Seite neu geladen wird.
Wie kann ich ändern @Html.AntiForgeryToken()
, um ein Token für den neuen, authentifizierten Benutzer zurückzugeben?
Ich füge jedem einen neuen GenericalPrincipal
mit einem benutzerdefinierten IIdentity
Wert hinzu Application_AuthenticateRequest
, wenn der @Html.AntiForgeryToken()
Aufruf HttpContext.Current.User.Identity
erfolgt. Tatsächlich ist meine benutzerdefinierte Identität mit der IsAuthenticated
Eigenschaft true festgelegt und @Html.AntiForgeryToken
scheint dennoch ein Token für den alten Benutzer zu rendern, es sei denn, ich lade die Seite neu.