c# - Blazor:没有会话/JWT 令牌时重定向到登录页面?
问题描述
我正在尝试在 Blazor 中创建一个新的应用程序,并且正在进行身份验证。我正在使用存储在本地存储中的 JWT 令牌。当应用程序加载时,我需要检查存储中是否有令牌。如果是这样,请将其添加到所有 API 请求的 HTTP 标头中,如果没有,则在页面加载之前重定向到登录页面......我在哪里做呢?有多个页面需要此检查,因此需要在一个位置完成以覆盖所有页面。这应该在启动中完成吗?
搜索没有提供解决方案,因为我是 Blazor 的新手,所以找到正确的搜索词有点困难 :)
解决方案
创建一个组件并命名它RedirectToLogin.razor
:
@inject NavigationManager Navigation
@code {
[CascadingParameter]
private Task<AuthenticationState> AuthenticationStateTask { get; set; }
protected override async Task OnInitializedAsync()
{
var authenticationState = await AuthenticationStateTask;
if (authenticationState?.User?.Identity is null || !authenticationState.User.Identity.IsAuthenticated)
{
var returnUrl = Navigation.ToBaseRelativePath(Navigation.Uri);
if (string.IsNullOrWhiteSpace(returnUrl))
Navigation.NavigateTo("YourLoginPath", true);
else
Navigation.NavigateTo($"{YourLoginPath}?returnUrl={returnUrl}", true);
}
}
}
修改App.razor
:
<Found Context="routeData">
<AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(HostLayout)">
<NotAuthorized>
<RedirectToLogin></RedirectToLogin>
</NotAuthorized>
</AuthorizeRouteView>
</Found>
致谢:这篇文章