Get current (logged) user in ASP.NET Core 3.0 .razor page

别说谁变了你拦得住时间么 提交于 2021-01-18 06:23:46

问题


I'm testing the waters with a blazer server-side app and trying to get the logged user in a .razor page. This

UserManager.GetUserAsync(User)

works in .cshtml view, but I cannot find a way to get it to work in .razor page. There is no "User" property to access. I use the IdentityUser with my ApplicationUser model that extends IdentityUser. I'm using AspNetCore 3.0 Preview 6.


回答1:


If you surround your code with the AuthorizeView component you can get access to a context object that supplies the current user.

<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>

If you don't want to use that approach you can request a cascading parameter called authenticationStateTask, which is provided by the 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.");
        }
    }
}



回答2:


What I did:

  1. added this to Startup.ConfigureServices
services.AddHttpContextAccessor();
  1. used this to get the username in my .razor page, these 2 lines first
@inject UserManager<WebPageUser> UserManager
@inject IHttpContextAccessor HttpContextAccessor
  1. then the call to show the username like this:
<p>Hello @UserManager.GetUserName(HttpContextAccessor.HttpContext.User)</p>


来源:https://stackoverflow.com/questions/56970377/get-current-logged-user-in-asp-net-core-3-0-razor-page

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!