相关疑难解决方法(0)

防伪令牌适用于用户"",但当前用户是"用户名"

我正在构建单页面应用程序并遇到防伪令牌问题.

我知道为什么问题发生我只是不知道如何解决它.

发生以下情况时,我收到错误消息:

  1. 未登录用户加载对话框(带有生成的防伪标记)
  2. 用户关闭对话框
  3. 用户登录
  4. 用户打开相同的对话框
  5. 用户在对话框中提交表单

防伪令牌适用于用户"",但当前用户是"用户名"

发生这种情况的原因是因为我的应用程序是100%单页,并且当用户通过ajax帖子成功登录时/Account/JsonLogin,我只是使用从服务器返回的"已验证视图"切换出当前视图但不重新加载页.

我知道这就是原因,因为如果我在步骤3和4之间简单地重新加载页面,就没有错误.

所以似乎@Html.AntiForgeryToken()在加载的表单中仍然为旧用户返回一个令牌,直到重新加载页面.

如何更改@Html.AntiForgeryToken()为新的经过身份验证的用户返回令牌?

我注入了新的GenericalPrincipal带有自定义IIdentity每个Application_AuthenticateRequest这样的时候@Html.AntiForgeryToken()被调用HttpContext.Current.User.Identity,其实我与自定义标识IsAuthenticated属性设置为true,但@Html.AntiForgeryToken似乎仍然呈现为老用户令牌,除非我做一个页面重新加载.

membership-provider asp.net-mvc-4

122
推荐指数
5
解决办法
8万
查看次数

在FormsAuthentication.SignOut()之后,Page.User.Identity.IsAuthenticated仍然为true

我有一个页面,当你按"注销"它会重定向到login.aspx有一个Page_Load方法调用的页面FormsAuthentication.SignOut().

母版页会显示在屏幕的右上角的"注销"链接并显示它的条件Page.User.Identity.IsAuthenticatedtrue.然而,通过单步执行代码后,该signout方法不会自动设置IsAuthenticatedfalse这是相当恼人的,任何想法?

c# asp.net forms-authentication

61
推荐指数
3
解决办法
5万
查看次数

如何将ViewData传递给HandleError视图?

在我的Site.Master文件中,我有3个简单的ViewData参数(我整个解决方案中只有3个参数).这些ViewData值对于我的应用程序中的每个页面都至关重要.由于这些值在我的Site.Master中使用,我创建了一个抽象的SiteController类,它覆盖了OnActionExecuting方法,以便为我的解决方案中的每个控制器上的每个Action方法填充这些值.

[HandleError(ExceptionType=typeof(MyException), View="MyErrorView")]
public abstract class SiteController : Controller
{
  protected override void OnActionExecuting(...)
  {
    ViewData["Theme"] = "BlueTheme";
    ViewData["SiteName"] = "Company XYZ Web Portal";
    ViewData["HeaderMessage"] = "Some message...";        

    base.OnActionExecuting(filterContext);

  }
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,当HandleErrorAttribute从SiteController类级别属性启动时,这些值不会传递给MyErrorView(最终是Site.Master).这是一个显示我的问题的简单方案:

public class TestingController : SiteController
{
  public ActionResult DoSomething()
  {
    throw new MyException("pwnd!");
  }
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试通过覆盖SiteController中的OnException()方法来填充ViewData参数,但无济于事.:(

在这种情况下,将ViewData参数传递给Site.Master的最佳方法是什么?

asp.net-mvc viewdata handleerror

14
推荐指数
1
解决办法
7835
查看次数

我如何修复防伪令牌是针对用户"",但当前用户是"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万
查看次数