我们在更新用户详细信息的api调用上附加了一个onExecuted操作过滤器。因为XSRF令牌是从HTTPContext生成的。当前,我们更新了线程。CurrentPrincipal将反映更新的详细信息。
[AntiForgeryUpdate]
[HttpPost]
public async Task<EditUserResponse> editUser (EditUserRequest request)
{
try
{
//code for updating user
var principal = Request.GetRequestContext().Principal;
var identity = principal.Identity;
identity.IdentityInfo = changedUser;
}
catch(Exception ex)
{
throw;
}
}
public class AntiForgeryUpdate: ActionFilterAttribute
{
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
if (actionExecutedContext.Request.Method != HttpMethod.Get)
{
AntiForgery.GetTokens(null, out string cookieToken, out string formToken);
var token = cookieToken + ":" + formToken;
actionExecutedContext.Response.Headers.AddCookies("XSRF-TOKEN", token);
}
base.OnActionExecuted(actionExecutedContext);
}
}