在提供的用于身份验证的模板中,您看到在LoginDisplay组件中显示的电子邮件地址,这是的Name
属性...Identity
,如下所示:
<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()
这是我们应该如何获取该信息的方法,还是有一种更好/更好的方式从经过身份验证的用户访问该数据?任何提示或建议表示赞赏!
如果您有所需的资源,那么Claims
这是获取它的最佳场所。您可以向您添加额外的声明Identity
-请参见如何在ASP.NET Core Web应用程序中添加额外的声明中做到这一点。如果这还不够,你想获得完全访问你的IdentityUser
授权的组件标记内部的实体,您可以做到这一点通过AuthenticationStateProvider
并UserManager<IdentityUser>
通过它们注入到你的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.";
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句