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.
You can create a method to get the current user : private Task<ApplicationUser> GetCurrentUserAsync() => _userManager. GetUserAsync(HttpContext. User);
In ASP.NET Framework, you'd do this by accessing HttpContext. Current. User and its properties (see below for an example), in . NET Core this is handled via dependency injection.
It just holds the username of the user that is currently logged in. After login successful authentication, the username is automatically stored by login authentication system to "HttpContext.Current.User.Identity.Name" property.
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.");
}
}
}
What I did:
services.AddHttpContextAccessor();
@inject UserManager<WebPageUser> UserManager
@inject IHttpContextAccessor HttpContextAccessor
<p>Hello @UserManager.GetUserName(HttpContextAccessor.HttpContext.User)</p>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With