如何从 Blazor 的数据库中获取经过身份验证的用户

Tal*_*dan 2 asp.net-core blazor blazor-server-side

我想显示当前登录用户的电子邮件地址。但我不知道,如何得到它。我搜索了很多小时,但一无所获。我找到了一些片段来获取名称,但没有片段可以获取其他字段,例如电子邮件或电话号码。此代码段中的用户没有从数据库中获取它的 ID。

@page "/"
@inject AuthenticationStateProvider AuthenticationStateProvider

<button @onclick="@LogUsername">Write user info to console</button>
<br />
<br />
@Message

@code {
    string Message = "";

    private async Task LogUsername()
    {
        var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
        var user = authState.User;

        if (user.Identity.IsAuthenticated)
        {
            Message = ($"{user.Identity.Name} is authenticated.");
        }
        else
        {
            Message = ("The user is NOT authenticated.");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Tao*_*hou 11

对于带有身份的 Asp.Net Core Blazor,声明将不包含电子邮件声明。

为了获得用户,您可以尝试UserManager.GetUserAsync(ClaimsPrincipal principal)如下:

@page "/"
@inject AuthenticationStateProvider AuthenticationStateProvider
@using Microsoft.AspNetCore.Identity;
@inject UserManager<IdentityUser> UserManager;

<button @onclick="@LogUsername">Write user info to console</button>
<br />
<br />
@Message

@code {
    string Message = "";

    private async Task LogUsername()
    {
        var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
        var user = authState.User;

        if (user.Identity.IsAuthenticated)
        {
            var currentUser = await UserManager.GetUserAsync(user);
            Message = ($"{user.Identity.Name} is authenticated. Email is { currentUser.Email }");
        }
        else
        {
            Message = ("The user is NOT authenticated.");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)