MVC 4, à la condition anti-faux jeton a été conçu pour l'utilisateur“, ” mais l'utilisateur actuel est “utilisateur”
J'ai récemment mis en Vivre une application web qui a été construit à l'aide de MVC 4 et Entity Framework 5. Le MVC application utilise Rasoir Vues.
J'ai remarqué à l'aide de Elmah que lorsque les utilisateurs se connectent à l'application, elles sont parfois l'erreur suivante se produit
The provided anti-forgery token was meant for user "" but the current user is "user"
J'ai fait un peu de recherche déjà sur la façon de résoudre ce problème, mais rien ne semble fonctionner pour moi. Veuillez voir mon de Vue Login et correspondant Actions de Contrôleur ci-dessous.
Rasoir Vue
@if (!HttpContext.Current.User.Identity.IsAuthenticated)
{
using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<div class="formEl_a">
<fieldset>
<legend>Login Information</legend>
<div class="lbl_a">
Email
</div>
<div class="editor-field">
@Html.TextBoxFor(m => m.Email, new { @class = "inpt_a" })<br />
@Html.ValidationMessageFor(m => m.Email)
</div>
<div class="lbl_a">
@Html.LabelFor(m => m.Password)
</div>
<div class="editor-field sepH_b">
@Html.PasswordFor(m => m.Password, new { @class = "inpt_a" })<br />
@Html.ValidationMessageFor(m => m.Password)
</div>
</fieldset>
</div>
<br />
<p>
<input type="submit" value="Log In" class="btn btn_d sepV_a" />
</p>
}
}
Contrôleur
[AllowAnonymous]
public ActionResult Login()
{
return View();
}
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid && _accountService.Logon(model.Email, model.Password, true))
{
//Validate
}
else
{
//inform of failed login
}
}
Je pensais que tout cela avait l'air correct, mais toujours l'erreur persiste. N'ont aucune idée sur comment résoudre ce problème?
Votre aide est grandement appréciée.
Grâce.
Êtes-vous de vérifier cette réponse ? stackoverflow.com/questions/14970102/...
Si AllowAnonymous est retiré de la Connexion de l'Action,puis connectez-vous en Action ne sera pas appelé ("tant Que l'utilisateur n'a pas encore connecté")
La solution est ici: stackoverflow.com/a/47868435/2736742
OriginalL'auteur tcode | 2013-12-02
Vous devez vous connecter pour publier un commentaire.
Je crois que ce qui se passe parce que les utilisateurs sont en double-cliquant sur le bouton de soumission du formulaire. Au moins c'est EXACTEMENT le cas sur mon site.
Dépannage anti-faux jeton de problèmes
Ne retirez PAS la validation de l'attribut, et surtout pas sur la page de connexion: security.stackexchange.com/questions/2120/...
OriginalL'auteur
Le code de validation qui va à l'encontre d'un AntiForgeryToken vérifie également votre utilisateur connecté les qualifications n'ont pas changé: ils sont également chiffrés dans le cookie.
Cela signifie que si vous vous êtes connecté ou dans une fenêtre ou un autre onglet du navigateur, votre formulaire de soumission échouera avec l'exception suivante:
Vous pouvez désactiver cette fonction en mettant
AntiForgeryConfig.SuppressIdentityHeuristicChecks = true;
dansApplication_Start
méthode à l'intérieur d'Global.asax
fichier.Lorsqu'un AntiForgeryToken ne pas valider votre site web va lever une Exception de type
System.Web.Mvc.HttpAntiForgeryException
. Vous pouvez faire cela un peu plus facile en moins de donner à l'utilisateur une plus informatif de la page ciblée à ces exceptions près, par la capture de l'HttpAntiForgeryException.Plus d'infos:
Anti faux jeton signifie pour l'utilisateur “” mais l'utilisateur actuel est le “nom d'utilisateur”
Html.AntiForgeryToken – Équilibrage de la Sécurité avec une facilité d'utilisation
AntiForgeryConfig.SuppressIdentityHeuristicChecks
à vrai?Non il n'y a pas de problème avec ce paramètre. si les informations d'identification utilisateur ont changé ce problème est survenu.
Je préfère cette solution car elle conserve les contrôles de sécurité en place et en informe l'utilisateur correctement, malheureusement, il est difficile d'arrêter un utilisateur double-cliquant ou en appuyant sur le bouton précédent du navigateur pour revenir à la page de connexion ou de quelque chose.
OriginalL'auteur
J'ai eu le même problème lors de l'
J'ai trouvé ce qui se passait seulement dans IE et j'ai résolu en faisant une couple de choses
Sur la page de connexion, j'ai ajouté une vérification pour voir si l'utilisateur est déjà authentifié, et si oui enregistrés l'utilisateur, et ensuite redirigé vers la page de Connexion à nouveau.
OriginalL'auteur