首页 > 解决方案 > Blazor:没有会话/JWT 令牌时重定向到登录页面?

问题描述

我正在尝试在 Blazor 中创建一个新的应用程序,并且正在进行身份验证。我正在使用存储在本地存储中的 JWT 令牌。当应用程序加载时,我需要检查存储中是否有令牌。如果是这样,请将其添加到所有 API 请求的 HTTP 标头中,如果没有,则在页面加载之前重定向到登录页面......我在哪里做呢?有多个页面需要此检查,因此需要在一个位置完成以覆盖所有页面。这应该在启动中完成吗?

搜索没有提供解决方案,因为我是 Blazor 的新手,所以找到正确的搜索词有点困难 :)

标签: c#authenticationredirectloginblazor

解决方案


创建一个组件并命名它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>

致谢:这篇文章


推荐阅读