假设我的应用中有一个可以更改用户名的模块。由于用户名已更改,因此 authcookie 应与 XSRF 令牌一起更新。
尝试此操作时,我收到一条错误消息,提示“提供的防伪令牌用于用户......”。好吧,我得到了一些关于如何解决这个问题的提示。由于当前 XSRF 令牌用于旧用户名而不是更新用户名,因此出现此错误。
查看 Global.asax 代码,用户名的更改只会反映在Application_AuthenticateRequest
. 我还修改了Application_PostAuthenticateRequest
强制在更新的用户名上创建新的 XSRF 令牌,如果在验证时会遇到相同的错误。
protected void Application_PostAuthenticateRequest(object sender, EventArgs e)
{
var existingXsrfCookie = Request.Cookies["XSRF-TOKEN"];
// logic for parsing XSRF-TOKEN
try
{
...more logic
AntiForgery.Validate(currentCookieToken, currentFormToken);
return;
}
catch (Exception ex)
{
Logger.ErrorException(ex.Message, ex);
}
// logic for creating new XSRF token
}
现在我真正的问题是,我可以从服务器端的 Global.asax 以外的地方触发Application_AuthenticateRequest
吗Application_PostAuthenticateRequest
?
我想在用户更新用户名后立即触发。