匿名用户看不到 Blazorise LayoutSider

Blazorise LayoutSider not visible to anonymous users

我正在使用 Blazor Web 服务器和 Blazorise 0.9.5.2 构建一个新的 .NET 6.0 应用程序。

按照目前的配置,sider 布局仅对登录用户可见。匿名用户看到整个布局 除了 sider。比较两种情况下的 HTTP 内容可以看出,匿名用户和登录用户之间的唯一区别是是否存在依赖于授权的两个导航栏链接,以及“欢迎”的开箱即用显示,用户”与右上角的“登录”。 Chrome 显示下载 CSS 或 JS 均未失败。

MainLayout.razor 看起来像这样:

<Layout Sider="true">
        <LayoutSider>
            <LayoutSiderContent>
                <Bar Breakpoint="Breakpoint.Desktop" NavigationBreakpoint="Breakpoint.Tablet" ThemeContrast="ThemeContrast.Dark"
                      Mode="BarMode.VerticalInline" CollapseMode="BarCollapseMode.Small">
                    <BarToggler />
                    <BarBrand>
                        <BarItem>
                            <BarLink To="">
                                <BarIcon IconName="_customIcon" />
                                My SIte
                            </BarLink>
                        </BarItem>
                    </BarBrand>
                    <NavMenu />
                </Bar>
            </LayoutSiderContent>
        </LayoutSider>

        <Layout>
            <LayoutHeader Fixed="true">
                <Bar @bind-Visible="@_topbarVisible" Breakpoint="Breakpoint.Desktop" Background="Background.Primary" ThemeContrast="ThemeContrast.Light">
                    <BarBrand>
                        <BarItem>
                            <BarLink To="">
                                <BarIcon IconName="FontAwesomeIcons.CloudSun" />
                                My Site
                            </BarLink>
                        </BarItem>
                    </BarBrand>
                    @* ReSharper disable once UnknownCssClass *@
                    <BarMenu Class="justify-content-end">
                        <BarEnd>
                            <AuthorizeView>
                                <Authorized>
                                    <BarItem>
                                        <Blazorise.Icon Name="FontAwesomeIcons.User" Visibility="Visibility.Visible" />
                                        Hi, @context?.User?.Identity?.Name
                                    </BarItem>
                                </Authorized>
                            </AuthorizeView>
                            <BarItem>
                                <LoginDisplay />
                            </BarItem>
                        </BarEnd>
                    </BarMenu>
                </Bar>
            </LayoutHeader>

            <LayoutContent Padding="Padding.Is4.OnX">
                @Body
            </LayoutContent>

            <LayoutFooter Fixed="true" Padding="Padding.Is4.OnX">
                Copyright &copy;@DateTimeOffset.UtcNow.Year Inner Drive Technology.
            </LayoutFooter>
        </Layout>

    </Layout>

NavMenu.razor 组件如下所示:

@using Blazorise.Icons.FontAwesome
<BarMenu>
    <BarStart>
        <BarItem>
            <BarLink To="">
                <BarIcon IconName="FontAwesomeIcons.Home" />
                Home
            </BarLink>
        </BarItem>
        <BarItem>
            <BarLink To="/Current">
                <BarIcon IconName="FontAwesomeIcons.CloudSun" />
                Current
            </BarLink>
        </BarItem>
        <AuthorizeView>
            <Authorized>
                <BarItem>
                    <BarLink To="/ApiStatus">
                        <BarIcon IconName="FontAwesomeIcons.Server" />
                        API Status
                    </BarLink>
                </BarItem>
                <BarItem>
                    <BarLink To="/BuildStatus">
                        <BarIcon IconName="FontAwesomeIcons.Rocket" />
                        Build Status
                    </BarLink>
                </BarItem>
            </Authorized>
        </AuthorizeView>
        <BarItem>
            <BarLink To="/About">
                <BarIcon IconName="FontAwesomeIcons.InfoCircle" />
                About
            </BarLink>
        </BarItem>
    </BarStart>
</BarMenu>

Program.cs 包含此部分:

builder.Services.AddRazorPages(options =>
{
    options.Conventions.AllowAnonymousToFolder("/");
    options.Conventions.AllowAnonymousToPage("/Index");
    options.Conventions.AllowAnonymousToFolder("/_content");
    options.Conventions.AllowAnonymousToFolder("/Pages");
    options.Conventions.AllowAnonymousToFolder("/Shared");
});

问题似乎出在 Mode="BarMode.VerticalInline" 属性上。 (我将为您省去导致此结论的 A/B 测试。)当存在 Mode 属性时,整个 sider 对匿名用户是隐藏的。当它不存在时,整个 sider 都是可见的。

有人知道这是怎么回事吗?

嗯,这很有趣。所有 CORS 的东西都是红色鲱鱼。

问题:默认的 AddAuthorization 服务提供商选项在某处阻止了请求,因此删除它允许加载所有页面组件,即使隐藏了需要身份验证的位也是如此。

builder.Services.AddAuthorization(options =>
{
    // By default, all incoming requests will be authorized according to the default policy
    //options.FallbackPolicy = options.DefaultPolicy; // Removed this line
});

删除回退政策解决了这个问题。