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:
- added this to Startup.ConfigureServices
services.AddHttpContextAccessor();
- used this to get the username in my .razor page, these 2 lines first
@inject UserManager<WebPageUser> UserManager
@inject IHttpContextAccessor HttpContextAccessor
- then the call to show the username like this:
<p>Hello @UserManager.GetUserName(HttpContextAccessor.HttpContext.User)</p>
Author by
Lucho Gizdov
Updated on June 20, 2022Comments
-
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 over 2 yearsI 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 almost 2 yearsUnfortunately, 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)