【问题标题】:How to get user's attributes from Identity in Blazor Server with organization authentication如何通过组织身份验证从 Blazor Server 中的身份获取用户属性
【发布时间】:2020-06-09 13:32:39
【问题描述】:

在为验证提供的模板中,您会看到 LoginDisplay 组件中显示的电子邮件地址,即...IdentityName 属性,如下所示:

<AuthorizeView>
    <Authorized>
        Hello, @context.User.Identity.Name!
        <a href="AzureAD/Account/SignOut">Log out</a>
    </Authorized>
    <NotAuthorized>
        <a href="AzureAD/Account/SignIn">Log in</a>
    </NotAuthorized>
</AuthorizeView>

我想知道的是如何访问有关经过身份验证的用户的其他信息。例如,以简单的方式就像一个全名。我发现使用Linq,您可以从Claims 属性中获取数据,如下所示:

@context.User.Claims.Where(c => c.Type == "name").FirstOrDefault().Value.ToString()

这是我们应该如何获取该信息的方式,还是有更好/首选的方式从经过身份验证的用户那里访问该数据?

【问题讨论】:

    标签: c# azure-active-directory asp.net-identity blazor


    【解决方案1】:

    如果您在Claims 中有所需的东西,这是获取它的最佳地点。您可以向您的 Identity 添加额外声明 - 请参阅 Adding extra claims in ASP.NET Core web applications 中的操作方法。如果这还不够,并且您希望在授权组件标记中获得对 IdentityUser 实体的完全访问权限,您可以通过 AuthenticationStateProviderUserManager&lt;IdentityUser&gt; 将它们注入您的 Blazor 页面来实现。

    @page "/"
    @inject AuthenticationStateProvider AuthenticationStateProvider
    @using Microsoft.AspNetCore.Identity;
    @inject UserManager<IdentityUser> UserManager;
    
    <p>@Details</p>
    
    @code {
    
        private string Details { get; set; }
    
        protected override async Task OnInitializedAsync()
        {
            var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
            var user = authState.User;
    
            if (user.Identity.IsAuthenticated)
            {
                var user = await _UserManager.FindByNameAsync(user.Identity.Name)
                Details = $"Your user phone # is {user.PhoneNumber}.";
            }
            else
            {
                Details = "The user is NOT authenticated.";
            }
        }
    }
    

    【讨论】:

    • 根据docs here UserManagerSigninManager 在 Razor 组件中不受支持。
    • 如果您使用的是 IdentityDbContext,您也可以通过数据库上下文从用户 DbSet 中检索用户。
    猜你喜欢
    • 1970-01-01
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    相关资源
    最近更新 更多