ASP.NET Core3.1登录后如何获取用户信息

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 大致相同。

  • 我见过的最好的解释。感谢你! (2认同)