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/JsonLoginich 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 GenericalPrincipalmit einem benutzerdefinierten IIdentityWert hinzu Application_AuthenticateRequest, wenn der @Html.AntiForgeryToken()Aufruf HttpContext.Current.User.Identityerfolgt. Tatsächlich ist meine benutzerdefinierte Identität mit der IsAuthenticatedEigenschaft true festgelegt und @Html.AntiForgeryTokenscheint dennoch ein Token für den alten Benutzer zu rendern, es sei denn, ich lade die Seite neu.