相关疑难解决方法(0)

一种在MVC 4应用程序中正确处理HttpAntiForgeryException的方法

这是场景:

我有一个登录页面,当用户签名时,它会被重定向到主页应用程序页面.然后用户使用浏览器后退按钮,现在他在登录页面上.他尝试再次登录,但现在抛出异常:

HttpAntiForgeryException(0x80004005):提供的防伪令牌适用于用户"",但当前用户是"userName".

我知道这与缓存有关.我使用自定义NoCache过滤器禁用了浏览器缓存以进行登录操作,该过滤器设置了所有必需的标头 - 无缓存,无存储,必须重新验证等.但是

  • 这不适用于所有浏览器
  • 特别是Safari(在大多数情况下是移动设备)完全忽略了这样的设置

我将尝试制作黑客并强制Safari移动刷新,但这不是我所期待的.

我想知道我是否可以:

  • 处理异常而不显示用户存在任何问题(对用户完全透明)
  • 通过更换防伪造令牌的用户名防止这个问题,这将再次允许用户登录没有这个例外,如果我涉及到浏览器的缓存黑客会在浏览器的下一个版本中停止工作.
  • 我真的不想依赖浏览器行为,因为每个行为都不同.

更新1

为了澄清一下,我知道如何处理MVC中的错误.问题是这个处理错误根本解决了我的问题.错误处理的基本思想是重定向到自定义错误页面,并带有好消息.但我希望防止发生此错误,而不是以用户可见的方式处理它.通过句柄我的意思是捕获用户名替换或其他合适的操作然后继续登录.

更新2

我添加了下面的解决方案,这对我有用.

c# asp.net-mvc antiforgerytoken

35
推荐指数
3
解决办法
2万
查看次数

尝试注销时,提供的防伪令牌适用于用户"XXXX",但当前用户为""

我有一个MVC 4应用程序,并在表单会话到期时遇到问题,然后用户尝试注销.

防爆.超时设置为5分钟.用户登录.用户10分钟不做任何事情.用户单击LogOff链接.用户收到错误:"提供的防伪令牌适用于用户"XXXX",但当前用户为"".

然后,用户必须通过一些体操来解决这个问题,以便他们可以重新登录然后重新注销(注销正在用于关闭当天的时间卡).

我想我明白为什么会发生这种情况......但不知道如何解决这个问题.

编辑:为什么我认为发生这种情况是因为最初加载页面时,会为当前登录的用户生成AntiForgery令牌.但是当会话到期并且他们尝试导航到注销页面时,当前用户是""而不是实际用户.因此存在不匹配并且呈现错误.

c# asp.net-mvc

18
推荐指数
2
解决办法
8261
查看次数

MVC 4提供的防伪令牌是针对用户""但当前用户是"用户"

我最近把Live使用MVC 4Entity Framework 5构建的Web应用程序.该MVC应用程序使用剃刀意见.

我注意到使用Elmah,当用户登录应用程序时,有时他们会收到以下错误

The provided anti-forgery token was meant for user "" but the current user is "user"
Run Code Online (Sandbox Code Playgroud)

我已经就如何解决这个问题做了一些研究,但似乎没有什么对我有用.请参阅下面的我的登录视图和相应的控制器操作.

剃刀视图

@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 => …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc antiforgerytoken razor asp.net-mvc-4

18
推荐指数
2
解决办法
3万
查看次数

我如何修复防伪令牌是针对用户"",但当前用户是"xxxx"错误

提供的防伪令牌适用于用户"",但当前用户为"xxxx".

我已经按照每一个解决方案来摆脱这个错误而没有任何成功:

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

然后发生上述错误

我的C#web MVC登录视图有:

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>
Run Code Online (Sandbox Code Playgroud)

我的帐户控制器是这样的:

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

    if (ModelState.IsValid)
    {
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个错误?

c# asp.net-mvc

9
推荐指数
1
解决办法
1万
查看次数

标签 统计

asp.net-mvc ×4

c# ×3

antiforgerytoken ×2

asp.net-mvc-4 ×1

razor ×1