Cod*_*Lee 4 c# asp.net-identity azure-active-directory blazor
在为身份验证提供的模板中,您可以看到 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>
Run Code Online (Sandbox Code Playgroud)
我想知道的是如何访问有关经过身份验证的用户的其他信息。例如,简单地说,就像全名一样。我发现Linq您可以像这样从属性中获取数据Claims:
@context.User.Claims.Where(c => c.Type == "name").FirstOrDefault().Value.ToString()
Run Code Online (Sandbox Code Playgroud)
这是我们应该如何获取该信息的方式,还是有更好/首选的方法来从经过身份验证的用户访问该数据?
如果您有需要的东西,Claims这里是获得它的最佳地方。您可以向您的应用程序添加额外的声明- 请参阅在 ASP.NET Core Web 应用程序中添加额外的声明Identity来了解如何执行此操作。如果这还不够,并且您希望完全访问授权组件标记内的实体,您可以通过将它们注入到您的页面来实现。IdentityUserAuthenticationStateProviderUserManager<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.";
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9336 次 |
| 最近记录: |