gpt4 book ai didi

c# - 如何修复防伪 token 是针对用户 ""的,但当前用户是 "xxxx "错误

转载 作者:太空狗 更新时间:2023-10-29 17:41:51 27 4
gpt4 key购买 nike

提供的防伪 token 是给用户“”的,但当前用户是“xxxx”。

我已遵循所有可能的解决方案来消除此错误,但均未成功:

场景如下:我在浏览器选项卡 A 选项卡 B 中打开了 2 个单独的登录选项卡:1. 我在选项卡 A 中登录我的网站2.然后尝试登录Tab B

然后出现上面的错误

我的 C# web MVC 登录 View 有:

v class="col-md-4 col-md-offset-4">
<form class="form-signin" role="form" action=@Url.Action("Login", "Account") method="POST" id="signInForm">
@Html.AntiForgeryToken()
<div class="form-group">
<label for="loginEmail">Email</label>
<input type="text" id="loginEmail" name="loginEmail" class="form-control" placeholder="Email address" >
</div>
<div class="form-group">
<label for="loginPassword">Password</label>
<input id="loginPassword" type="password" name="loginPassword" class="form-control" placeholder="Password" >
</div>
<button class="btn btn-lg btn-primary btn-block main-btn" type="submit">Sign in</button>
<div>
<br>
<a href="@Url.Action("Index","GettingStarted")">Register</a><br>
<a href="@Url.Action("ForgotPassword","Account")">Forgot your password?</a>
</div>
</form>

我的账户 Controller 是这样的:

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model)
{

if (ModelState.IsValid)
{

我该如何修复这个错误?

最佳答案

发生这种情况是因为两个浏览器选项卡共享同一个 cookie 存储区。使用第一个选项卡进行身份验证会设置一个新的 cookie,用于标识您的用户名。当提交第二个选项卡时,它将传递从第一个选项卡中的成功身份验证中检索到的更新后的 cookie,以及在身份验证之前加载的隐藏表单字段,将您标识为匿名用户。因为cookie中的用户名和隐藏的表单字段不匹配验证失败。

ValidateAntiForgeryTokenAttribute 使用的 AntiForgeryWorker 将经过身份验证的用户名编码到 cookie 和隐藏的表单字段中,并确保它们在验证时匹配。因此,无论何时您进行身份验证或更改用户,如果发布到具有 ValidateAntiForgeryTokenAttribute 的操作,此验证都会失败。

不幸的是,这意味着您的选择仅限于不使用 ValidateAntiForgeryTokenAttribute 保护登录操作,忽略您描述的场景并让验证失败,或者在 MVC 中重新实现 AntiForgery 实现,这样就不会在验证过程中包含用户名。

关于c# - 如何修复防伪 token 是针对用户 ""的,但当前用户是 "xxxx "错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26978931/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com