Blazor 托管 - 在显示应用程序之前立即授权

din*_*ars 2 authentication asp.net-identity asp.net-core blazor

任何人都可以帮助我推动我的托管 Blazor 应用程序(客户端、服务器和共享)在应用程序首次显示之前立即请求登录。我想要用户在访问应用程序之前必须登录的体验。

我的起点是具有 Api 授权(个人用户帐户)的 Blazor Webassemble(托管)模板

在用户请求具有该Authorize属性的特定操作/页面之前,在服务器端操作或客户端 Razor 页面上使用该属性不会启动身份验证流程。Authorize在第一次显示应用程序之前,我将如何开始授权流程?

我相信对于比我更精明的人来说这是可能的,甚至是微不足道的。有人可以给我一个正确的方向吗?

Dav*_*son 5

我创建了一个控件 RedirectToLogin.razor

@inject NavigationManager Navigation
@code {
    protected override void OnInitialized()
    {
        String thisPage = Navigation.Uri.Replace(Navigation.BaseUri, "~/");
        Navigation.NavigateTo($"Identity/Account/Login?returnUrl={thisPage}");
        base.OnInitialized();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后将其插入到mainlayout.razor中

<div class="container-fluid">
 <AuthorizeView>
        <Authorized>
            <NavigationLogger />
            <ContextMenuMouseClick>
                <MenuTopBar />
                <NavMenu />
                <SubPageContainer>
                    @Body
                </SubPageContainer>
            </ContextMenuMouseClick>
        </Authorized>
        <NotAuthorized>
            <RedirectToLogin />
        </NotAuthorized>
</AuthorizeView>
</div>
Run Code Online (Sandbox Code Playgroud)

因此,当布局加载并且处于 NotAuthorized 状态时,它将重定向到登录页面,授权后将返回到它尝试访问的页面。

希望这可以帮助。

  • 谢谢你!我让这个工作。开箱即用的 Blazor 托管客户端模板已创建 RedirectToLogin.razor 控件。但是,与您的不同,默认的 RediriectToLogin 重定向到页面 Authentication.razor,该页面也是由模板提供的。我想保留它,因此必须添加一个新的空布局以供 Authentication.razor 页面使用。否则,身份验证页面将再次加载 MainLayout.razor 和 RedirectToLogin,然后陷入愚蠢的循环:-) 我在这次冒险中又迈出了一步,感谢您的帮助! (2认同)