User.Identity.Name 返回用户名而不是名称



我想在导航栏中显示用户的名称而不是用户名 _LoginPartial 目前我正在使用User.Identity.GetUserName()作为用户名,但现在我想显示当前用户的名称。

_LoginPartial由 Startup.Auth 调用.cs因此我无法在后端运行查询并获取用户的名称,因此我只能使用可以通过视图中的 razor 运行的内置函数。

我已经尝试了所有这些,但它们都给了我用户名而不是用户名。

<small>@System.Threading.Thread.CurrentPrincipal.Identity.Name</small>
<small>@User.Identity.Name</small>
<small>@threadPrincipal.Identity.Name</small>
<small>@System.Web.HttpContext.Current.User.Identity.Name</small>

如何获取名称而不是用户名

这是用户表

ID
Email
EmailConfirm
Password
Security
PhoneNumber
PhoneNumberConfirm
TwoFactorEnable
LockoutEndDateUtc
LockoutEnable
AccessFailedCount
UserName
Name
Status
Image

由于 Name 是 ApplicationUser(扩展的 IdentityUser(的自定义字段,因此您需要将该字段添加为声明。

如果您使用模板来设置Identity,那么您将在IdentityModels中找到.cs类ApplicationUser。在这里,我添加了一个字段"名称"并将其添加为声明:

public class ApplicationUser : IdentityUser
{
    public string Name { get; set; }
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
    {
        // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        // Add custom user claims here
        userIdentity.AddClaim(new Claim("CustomName", Name));
        return userIdentity;
    }
}

此代码将添加一个具有名称值的声明"自定义名称"。

在您看来,您现在可以阅读声明。下面是 _LoginPartial 中的一个示例:

<ul class="nav navbar-nav navbar-right">
    <li>
        @{ var user = (System.Security.Claims.ClaimsIdentity)User.Identity; }
        @Html.ActionLink("Hello " + user.FindFirstValue("CustomName") + "!", "Index", "Manage", routeValues: null, htmlAttributes: new { title = "Manage" })
    </li>

您可以添加其他自定义字段以及声明。

相关内容

  • 没有找到相关文章

最新更新