Как получить атрибуты пользователя из Identity в Blazor Server с проверкой подлинности организации - PullRequest
1 голос
/ 25 февраля 2020

В шаблоне, предоставленном для аутентификации, вы видите адрес электронной почты, отображаемый в компоненте 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()

Это то, как мы должны получать эту информацию, или есть лучший / предпочтительный способ доступа что данные от аутентифицированного пользователя? Любые советы или советы ценят!

1 Ответ

3 голосов
/ 25 февраля 2020

Если у вас есть то, что нужно в Claims, это лучшее место, чтобы получить его. Вы можете добавить дополнительные претензии к вашему Identity - посмотрите, как это сделать, в Добавление дополнительных претензий в ASP. NET Основные веб-приложения . Если этого недостаточно, и вы хотите получить полный доступ к вашей сущности 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.";
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...