Je suis en train de construire une seule page de l'application et de rencontrer un problème avec les anti-faux jetons.
Je sais pas pourquoi le problème se produit-je ne sais pas comment le résoudre.
Je reçois le message d'erreur lorsque les événements suivants se produit:
- Non-enregistrés l'utilisateur charge un dialogue (avec un anti-faux jeton)
- Utilisateur ferme la boîte de dialogue
- L'utilisateur se connecte au
- L'utilisateur ouvre la boîte de dialogue même
-
L'utilisateur soumet le formulaire dans la boîte de dialogue
Anti forgery token is meant for user "" but the current user is "username"
La raison à cela est parce que mon application est 100% sur une seule page, et quand un utilisateur se connecte avec succès par le biais d'un ajax post d' /Account/JsonLogin
, il me suffit de passer les points de vue actuels avec la "authentifié vues" retourné par le serveur, mais ne pas recharger la page.
Je sais que c'est la raison parce que si je simple rechargement de la page, entre les étapes 3 et 4, il n'y a pas d'erreur.
Il semble donc que, @Html.AntiForgeryToken()
dans la forme chargée renvoie toujours un jeton pour l'ancien utilisateur jusqu'à ce que la page est rechargée.
Comment puis-je changer d' @Html.AntiForgeryToken() to return a token for the new, authenticated user?
J'injecte un nouveau GenericalPrincipal
avec une coutume IIdentity
sur chaque Application_AuthenticateRequest
donc @Html.AntiForgeryToken()
est appelé en HttpContext.Current.User.Identity
est, en fait, mon Identité personnalisée avec IsAuthenticated
propriété est définie à vrai, et pourtant, @Html.AntiForgeryToken
encore semble rendre un jeton pour l'ancien utilisateur, sauf si je fais un rechargement de la page.