繁体   English   中英

在 ASP.NET One Core 中更新声明值

[英]Update Claims values in ASP.NET One Core

我在 MVC 6(Asp.Net One Core)中有一个 Web 应用程序,我使用的是基于声明的身份验证。 在登录方法中,我设置了声明:

var claims = new Claim[]
{
    new Claim("Name", content.Name),
    new Claim("Email", content.Email),
    new Claim("RoleId", content.RoleId.ToString()),
};

var ci = new ClaimsIdentity(claims, "password");
await HttpContext.Authentication.SignInAsync("Cookies", new ClaimsPrincipal(ci));

现在,例如,如果用户更改了用户配置文件中的电子邮件,我该如何更改“电子邮件”声明的电子邮件值? 我必须再次 SignOutAsync 和 SignInAsync 才能更新 cookie? 最好的解决方案是将其保存到经典会话中? 有更好的解决方案吗? 我完全错了?

有什么建议么?

另一种选择,而不是SignOutAsyncSignInAsync ,是使用RefreshSignInAsync

例子:

var user = await _userManager.FindByIdAsync(yourId);
await _signInManager.RefreshSignInAsync(user);

SignInManager (net 5.0.8) 中查看RefreshSignInAsync代码: https : //github.com/dotnet/aspnetcore/blob/ae2eabad0e49302d0632a7dde917fdc68d960dc4/src/Identity/Core/src/SignInManager.cs#L170

我必须再次 SignOutAsync 和 SignInAsync 才能更新 cookie?

答案是肯定的。

最简单的方法是您可以在更新电子邮件的同一操作方法中手动注销和登录(再次创建声明)

最好的解决方案是将其保存到经典会话中?

我建议不要这样做。 在 ASP.Net MVC 中显式使用会话状态是一种不好的做法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM