@page "/"
<button @onclick="LogUsername">Log username</button>
<p>@authMessage</p>
@code {
[CascadingParameter]
private Task<AuthenticationState> authenticationStateTask { get; set; }
private string authMessage;
private async Task LogUsername()
{
var authState = await authenticationStateTask;
var user = authState.User;
if (user.Identity.IsAuthenticated)
{
authMessage = $"{user.Identity.Name} is authenticated.";
}
else
{
authMessage = "The user is NOT authenticated.";
}
}
}
Set up the Task<
AuthenticationState>
cascading parameter using the AuthorizeRouteView and CascadingAuthenticationState components in the App
component (App.razor
):
<CascadingAuthenticationState>
<Router AppAssembly="@typeof(Program).Assembly">
<Found Context="routeData">
<AuthorizeRouteView RouteData="@routeData"
DefaultLayout="@typeof(MainLayout)" />
</Found>
<NotFound>
<LayoutView Layout="@typeof(MainLayout)">
<p>Sorry, there's nothing at this address.</p>
</LayoutView>
</NotFound>
</Router>
</CascadingAuthenticationState>
In a Blazor WebAssembly App, add services for options and authorization to Program.cs
:
builder.Services.AddOptions();
builder.Services.AddAuthorizationCore();
In a Blazor Server app, services for options and authorization are already present, so no further action is required.
References
https://docs.microsoft.com/en-us/aspnet/core/blazor/security/?view=aspnetcore-6.0#expose-the-authentication-state-as-a-cascading-parameter