Blazor - Использование каскадного состояния аутентификации между различными макетами - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть проект. NET Core 3.1 Blazor, где в приложении будет 3 подпапки, каждая из которых обслуживает одну страницу, содержимое которой будет управляться WebGL с использованием Three. JS.

В первой папке, с которой я тестирую, я создал два элемента. Первый называется «_TestPage.cs html», а другой - «Index.razor». На обеих страницах есть следующая директива @page:

@page "/Applications/TestFolder1/Index"

На странице _TestPage.cs html содержится следующее:

<!DOCTYPE html>
<html lang="en">
    <body>
        <app>
            <component type="typeof(App)" render-mode="Server" />
        </app>
    </body>
    <head>
        <meta charset="utf-8" />

        <meta name="viewport" content="width=device-width, initial-scale=1.0" />

        <title>My Blazor App</title>

        <base href="/" />

        <script src="_framework/blazor.server.js"></script>
        <style type="text/css">
            body {
                background-color: red;
            }
        </style>
    </head>
</html>

Страница Index.razor также имеет в нем:

@layout EmptyLayout
@page "/Applications/Monitor/Index"

<AuthorizeView>
    <Authorized>
        <p style="color: black;">***I can not see this text either...***</p>
    </Authorized>
    <NotAuthorized>
        <RedirectNotAuthorizedAccess />
    </NotAuthorized>
</AuthorizeView>

Однако, когда приложение запускается, я могу go напрямую перейти на страницу индекса в подпапке без необходимости входа в систему. Я получаю solid красный фон, но я не вижу никакого отрендеренного текста, и при этом я не перенаправляюсь на страницу входа в систему, как это должно быть, поскольку я не вошел в систему. когда я не использую компонент MainLayout по умолчанию, создаваемый Visual Studio, и перезаписал макет на странице бритвы с помощью директивы @layout?

1 Ответ

0 голосов
/ 07 апреля 2020

Полагаю, я решил свою проблему. Похоже, что две вещи были настроены неправильно. Во-первых, мой компонент «EmptyLayout» не имел компонента «AuthroizeView» enet, определенного в нем для обработки пользователей, не прошедших проверку подлинности. Во-вторых, мой компонент «RedirectNotAuthorizedAccess» не выполнял «forceLoad = true» при перенаправлении на страницу входа с помощью «NavigationManager». Это препятствовало тому, чтобы страница входа отображалась и все еще отображала solid красный фон из макета гнезда CSTHML из моего примера в исходном сообщении.

Код для страницы CS HTML выше остается прежним и теперь мои два других компонента кодируются следующим образом:

Index.razor

@page "/Application/TestFolder1/Index"
@layout EmptyLayout

@code {

}

EmptyLayout.razor

@inherits LayoutComponentBase;

<AuthorizeView>
    <Authorized>
        <p style="color: green;">I can now see this text...</p>
    </Authorized>
    <NotAuthorized>
        <RedirectNotAuthorizedAccess />
    </NotAuthorized>
</AuthorizeView>
...