首页 > 解决方案 > 在 ASP.NET Core 3.0 .razor 页面中获取当前(登录)用户

问题描述

我正在使用西装外套服务器端应用程序测试水域,并尝试在 .razor 页面中获取登录用户。这个

UserManager.GetUserAsync(User)

在 .cshtml 视图中工作,但我找不到让它在 .razor 页面中工作的方法。没有可访问的“用户”属性。我将 IdentityUser 与扩展 IdentityUser 的 ApplicationUser 模型一起使用。我正在使用 AspNetCore 3.0 Preview 6。

标签: .netasp.net-coreblazor

解决方案


如果你用AuthorizeView组件包围你的代码,你可以访问一个context提供当前用户的对象。

<AuthorizeView>
    <Authorized>
        <h1>Hello, @context.User.Identity.Name!</h1>
        <p>You can only see this content if you're authenticated.</p>
    </Authorized>
    <NotAuthorized>
        <h1>Authentication Failure!</h1>
        <p>You're not signed in.</p>
    </NotAuthorized>
</AuthorizeView>

如果您不想使用这种方法,您可以请求一个名为 的级联参数authenticationStateTask,该参数由CascadingAuthenticationState.

@page "/"

<button @onclick="@LogUsername">Log username</button>

@code {
    [CascadingParameter]
    private Task<AuthenticationState> authenticationStateTask { get; set; }

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

        if (user.Identity.IsAuthenticated)
        {
            Console.WriteLine($"{user.Identity.Name} is authenticated.");
        }
        else
        {
            Console.WriteLine("The user is NOT authenticated.");
        }
    }
}

推荐阅读