Blazor Server .NET 8: как правильно получить доступ к ProtectedLocalStorage после входа в систему с помощью NavigationMaC#

Место общения программистов C#
Ответить
Anonymous
 Blazor Server .NET 8: как правильно получить доступ к ProtectedLocalStorage после входа в систему с помощью NavigationMa

Сообщение Anonymous »

После успешного входа в систему (аутентификация на основе JWT, хранящаяся в protectedLocalStorage) я хочу выполнить перенаправление на ReturnUrl, если он существует.
Когда ReturnUrl -страница назначения- имеет атрибут Authorize и выполняется GetAuthenticationStateAsync(), protectedLocalStorage становится нулевым после NavigationManager.NavigateTo() выполняется.
Это соответствующий код для страницы входа

Код: Выделить всё

await protectedLocalStorage.SetAsync("authToken", token);
NavigationManager.NavigateTo(ReturnUrl ?? "");
И я пытаюсь получить protectedLocalStorage в GetAuthenticationStateAsync() вот так

Код: Выделить всё

ProtectedBrowserStorageResult result;
try
{
result = await protectedLocalStorage.GetAsync("authToken"); //protectedLocalStorage is null after the redirect
}
catch
{
result = new();
}

var anonymous = new ClaimsPrincipal(new ClaimsIdentity());

if (!result.Success) //Since protectedLocalStorage is null I get redirected back to login page.
{
return new AuthenticationState(anonymous);
}
Я отключил предварительную отрисовку в App.razor, и она работает нормально, за исключением попыток перенаправления на авторизованный компонент

Код: Выделить всё


@code {
[CascadingParameter] private HttpContext HttpContext { get; set; } = default!;

private IComponentRenderMode? RenderModeForPage => HttpContext.Request.Path.StartsWithSegments("/Account") ? null : new InteractiveServerRenderMode(prerender: false);
}
Если я обычно перехожу к авторизованному компоненту, щелкая ссылку или вводя URL-адрес после входа в систему, он работает правильно. Это происходит только после использования функции NavigationManager.NavigateTo().
Похоже, что функция NavigateTo() вызывает GetAuthenticationStateAsync() слишком рано в жизненном цикле Blazor, protectedLocalStorage еще не готов.
Как убедиться, что protectedLocalStorage готов, когда я выполняю перенаправление?

Подробнее здесь: https://stackoverflow.com/questions/792 ... er-login-u
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»