Я запустил ваш код, и он сохранил состояние аутентификации ...
Вот мой код:
Index.razor
@page "/"
@using System.Security.Claims;
<button @onclick="SignIn">Sign in</button>
@inject AuthenticationStateProvider AuthenticationStateProvider
@code {
private string userName = "FakeUser";
private async Task SignIn(MouseEventArgs e)
{
var fakeUser = new ClaimsPrincipal(new ClaimsIdentity(new[]
{
new Claim(ClaimTypes.Name, userName),
}, "Fake authentication type"));
var provider =
(IHostEnvironmentAuthenticationStateProvider)AuthenticationStateProvider;
//provider is ServerAuthenticationStateProvider
provider.SetAuthenticationState(Task.FromResult(new
AuthenticationState(fakeUser)));
var authState = await
AuthenticationStateProvider.GetAuthenticationStateAsync();
Console.WriteLine(authState.User.Identity.Name);
}
}
Counter.razor
@page "/counter"
@inject AuthenticationStateProvider AuthenticationStateProvider
@code {
protected override async Task OnInitializedAsync()
{
var authState = await
AuthenticationStateProvider.GetAuthenticationStateAsync();
Console.WriteLine(authState.User.Identity.Name);
}
}
Пожалуйста, запустите ваше приложение, щелкните элемент кнопки, затем нажмите пункт меню «Счетчик» в NavMenu, чтобы перейти к компоненту «Счетчик» ... go теперь в окно «Вывод» и посмотрите, если слово FakeUser было напечатано дважды.