最佳答案
我正在构建一个单页应用程序,遇到了一个防伪令牌的问题。
我知道问题发生的原因,只是不知道如何解决。
当下列情况发生时,我得到了错误:
防伪令牌是为用户“”,但当前用户是 用户名
之所以会发生这种情况,是因为我的应用程序是100% 单页的,当用户通过 ajax 文章成功登录到 /Account/JsonLogin
时,我只需用从服务器返回的“经过身份验证的视图”切换掉当前的视图,而不是 不要重新加载页面。
我知道这就是原因,因为如果在步骤3和步骤4之间重新加载页面,就不会出现错误。
因此,在页面重新加载之前,已加载表单中的 @Html.AntiForgeryToken()
似乎仍然为老用户返回一个令牌。
如何更改 @Html.AntiForgeryToken()
以返回新的、经过身份验证的用户的令牌?
我在每个 Application_AuthenticateRequest
上注入一个新的 GenericalPrincipal
和一个定制的 IIdentity
,所以当 @Html.AntiForgeryToken()
被称为 HttpContext.Current.User.Identity
的时候,事实上我的定制 Identity 和 IsAuthenticated
属性被设置为 true,然而除非我重新加载页面,否则 @Html.AntiForgeryToken
似乎仍然为老用户呈现一个令牌。