ham*_*med 4 c# claims-based-identity web asp.net-core asp.net-core-3.1
我试图在登录 ASP.NET Core 3.1 后获取用户信息(如姓名、电子邮件、id 等信息)。
这是我在登录操作中的代码
var claims = new List<Claim>()
{
new Claim(ClaimTypes.NameIdentifier, "NameIdentifire"),
new Claim(ClaimTypes.Name, "Name"),
new Claim(ClaimTypes.Email, "Email")
};
var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
var principal = new ClaimsPrincipal(identity);
HttpContext.SignInAsync(principal);
Run Code Online (Sandbox Code Playgroud)
在视图中,我只能通过查看来访问名称@User.Identity.Name。我的问题是:如何获取不同视图中用户的其他信息?
Nic*_*ada 12
您可以创建一个像这样的帮助器类:
internal static class ClaimsPrincipalExtensions
{
internal static string GetEmail(this ClaimsPrincipal claimsPrincipal)
=> claimsPrincipal.FindFirstValue(ClaimTypes.Email);
internal static string GetFirstName(this ClaimsPrincipal claimsPrincipal)
=> claimsPrincipal.FindFirstValue(ClaimTypes.Name);
internal static string GetLastName(this ClaimsPrincipal claimsPrincipal)
=> claimsPrincipal.FindFirstValue(ClaimTypes.Surname);
internal static string GetPhoneNumber(this ClaimsPrincipal claimsPrincipal)
=> claimsPrincipal.FindFirstValue(ClaimTypes.MobilePhone);
internal static string GetUserId(this ClaimsPrincipal claimsPrincipal)
=> claimsPrincipal.FindFirstValue(ClaimTypes.NameIdentifier);
}
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
_profileModel.Email = user.GetEmail();
_profileModel.FirstName = user.GetFirstName();
_profileModel.LastName = user.GetLastName();
_profileModel.PhoneNumber = user.GetPhoneNumber();
Run Code Online (Sandbox Code Playgroud)
此代码来自 Blazor WASM 应用程序,但该代码与 ASP.NET Core 大致相同。
| 归档时间: |
|
| 查看次数: |
10912 次 |
| 最近记录: |