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

11,677

Solution 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.");
        }
    }
}

Solution 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>
Share:
11,677
Lucho Gizdov
Author by

Lucho Gizdov

Updated on June 20, 2022

Comments

  • Lucho Gizdov
    Lucho Gizdov almost 2 years

    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.

  • Tim Davis
    Tim Davis over 2 years
    I had situation where I have a blazor app using authorized view.. But also had a controller which needed the current user.. This works for that
  • jamie yello
    jamie yello almost 2 years
    Unfortunately, it is strongly recommended that you do not use the IHttpContextAccessor class at all, it is no longer supported in Blazor server and will not work in all cases. (official warning)