gpt4 book ai didi

c# - 在默认的 ASP.Net MVC 模板中,为什么用户每次更改某些内容时都会重新登录?

转载 作者:太空狗 更新时间:2023-10-30 01:34:49 24 4
gpt4 key购买 nike

所以我正在使用默认的 ASP.Net MVC 模板并从项目中整理出我不需要的东西。如果用户更改密码或电话号码等内容,他们会再次登录。

例如,在 ManagerController.cs 文件中,我一直看到类似的东西

    //
// POST: /Manage/ChangePassword
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> ChangePassword(ChangePasswordViewModel model)
{
if (!ModelState.IsValid)
{
return View(model);
}
var result = await UserManager.ChangePasswordAsync(User.Identity.GetUserId<int>(), model.OldPassword, model.NewPassword);
if (result.Succeeded)
{
var user = await UserManager.FindByIdAsync(User.Identity.GetUserId<int>());
if (user != null)
{
await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
}
return RedirectToAction("Index", new { Message = ManageMessageId.ChangePasswordSuccess });
}
AddErrors(result);
return View(model);
}

该代码的相关部分是

            var user = await UserManager.FindByIdAsync(User.Identity.GetUserId<int>());
if (user != null)
{
await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
}

这段重复代码的目的是什么?我需要它吗?顺便说一句,我正在删除 2 因素授权和电话验证。

最佳答案

使用 SignInManager.SignIn 再次登录用户应该会导致重新生成用户身份验证 cookie(如果使用默认的应用程序 cookie),并随之重新生成用户的安全标记.每次用户角色、声明、登录或存储在 ClaimsIdentity (User.Identity) 中的任何其他内容发生更改时,都应更改安全标记。否则,用户将使用与数据库不匹配的过时 cookie(它是序列化的 ClaimsIdentity)。如果发生这种情况,他们可能拥有被删除的角色,或者没有被添加的角色。

还有其他方法可以重新生成安全戳,这实际上是所有需要的,因为带有无效安全戳的身份验证 cookie 将简单地重新生成以包含正确的信息,而不是拒绝未经授权的请求。但是,这就是默认情况下的完成方式,可能就是所需的全部。

关于c# - 在默认的 ASP.Net MVC 模板中,为什么用户每次更改某些内容时都会重新登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28884323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com