При просмотре встроенного шаблона MS я заметил, что они всегда звонят на SignInManager.SignInAsync
, после изменения учетных данных пользователя (например, пароля, двухфакторной аутентификации и т. Д.).
Я также заметил, чтоClaims
обновляются, как только пользователь выходит из системы и снова входит в систему ... поэтому после изменения "FirstName", которое хранится в Claim
, я вызвал SignInManager.SignInAsync
для повторной регистрации пользователя ... таким образом,Claims
обновлены:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> UpdateFirstName(string firstName)
{
var user = await UserManager.FindByIdAsync(User.Identity.GetUserId<long>());
user.FirstName = firstName;
// update FirstName which is stored in a Claim
var result = await UserManager.UpdateAsync(user);
if (result.Succeeded)
{
// re-signin the user, to refresh the Claims
await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
// you need to redirect after calling SignInAsync, so claims are refreshed
return RedirectToAction("Index");
}
// add some error message...
return View();
}
Примечание: как показано в вопросе, я сохраняю Claims
в Cookie.