Blazor hosted - авторизуйтесь непосредственно перед отображением приложения - PullRequest
0 голосов
/ 02 мая 2020

Может ли кто-нибудь дать мне помощь? sh, чтобы заставить мое размещенное приложение Blazor (Client, Server и Shared) немедленно запросить вход в систему, прежде чем приложение будет первоначально отображено. Я хочу, чтобы пользователь вообще мог войти в систему, прежде чем получить доступ к приложению.

Моя отправная точка - шаблон веб-сборки Blazor (размещенный) с авторизацией Api (индивидуальные учетные записи пользователей)

Использование Атрибут Authorize на действиях на стороне сервера или на странице Razor на стороне клиента не будет инициировать поток аутентификации, пока пользователь не запросит указанную c action / page с атрибутом Authorize. Как бы я go запустил процесс авторизации в качестве первого шага, прежде чем приложение будет отображаться в первый раз?

Я уверен, что это возможно и даже тривиально для кого-то более опытного, чем я. Кто-нибудь может дать мне толчок в правильном направлении, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

Клиент Blazor загружается из состояния c index.html в wwwroot. В проекте «Сервер» это сопоставлено с конечной точкой в ​​Startup.cs, в основном универсальным для всех конечных точек, не используемых вашими страницами или контроллерами Razor:

app.UseEndpoints(endpoints =>
{
    endpoints.MapRazorPages();
    endpoints.MapControllers();
    endpoints.MapFallbackToFile("index.html");
});

Для вашего сценария:

  1. Создайте новый макет на сервере, скажем _LayoutBlazor.cs html
  2. Повторно создайте содержимое index.html из клиента. Обратите внимание, что файлы _framework с Клиента копируются на Сервер wwwroot при сборке:

    <app>Loading...</app>

    <script src="@Href("~/_framework/blazor.webassembly.js")"></script>

  3. Создайте новую страницу Razor, поместите на нее тег «Authorize» и используйте _LayoutBlazor.

  4. Удалите endpoints.MapFallbackToFile("index.html"); из Startup.cs

Марк Гулд создал здесь подтверждение концепции: RazorBlazor

0 голосов
/ 02 мая 2020

Я создал элемент управления 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();
    }
}

, а затем вставил его в mainlayout.razor

<div class="container-fluid">
 <AuthorizeView>
        <Authorized>
            <NavigationLogger />
            <ContextMenuMouseClick>
                <MenuTopBar />
                <NavMenu />
                <SubPageContainer>
                    @Body
                </SubPageContainer>
            </ContextMenuMouseClick>
        </Authorized>
        <NotAuthorized>
            <RedirectToLogin />
        </NotAuthorized>
</AuthorizeView>
</div>

Итак, когда макет загружен и находится в состоянии NotAuthorized он будет перенаправлен на страницу входа и после авторизации вернется на страницу, к которой пытался получить доступ.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...