Настройка общего маршрута в приложении ASP.NET Core SPA

Я создал приложение ASP.NET Core 2.1 SPA, используя встроенный шаблон React/Redux, который все довольно хорошо настраивает.

Мое приложение требует аутентификации и потому что это SPA appЯ хочу, чтобы параметры аутентификации были достаточно простыми, поэтому я настроил только jwt аутентификация и MSAL обрабатывать jwt жетоны.

Однако я хотел бы иметь простую статическую HTML-страницу для публичных / не прошедших проверку подлинности пользователей. Итак, мой вопрос: как мне создать этот маршрут для анонимных пользователей и убедиться, что они перенаправлены на него?

Структура проекта показана ниже, это именно то, что я получил из коробки, когда VS создал для меня приложение React:

введите описание изображения здесь

И единственный маршрут, который я вижу в Startup.cs наряду со связанными с SPA настройками:

app.UseStaticFiles();
app.UseSpaStaticFiles();

app.UseMvc(routes =>
{
    routes.MapRoute(
       name: "default",
       template: "{controller}/{action=Index}/{id?}");
});

app.UseSpa(spa =>
{
    spa.Options.SourcePath = "ClientApp";

    if (env.IsDevelopment())
    {
        spa.UseReactDevelopmentServer(npmScript: "start");
    }
});

Итак, вкратце, как мне создать маршрут для статической страницы, которую я хочу создать для анонимных пользователей, и убедиться, что мои пользователи перенаправлены на нее, если они не приходят с jwt фишка?

1 ответ

Решение

Однако я хотел бы иметь простую статическую HTML-страницу для публичных / не прошедших проверку подлинности пользователей.

Вы создаете одностраничное приложение, поэтому первое, что поразят ваши пользователи (по замыслу), это SPA, и только клиентское приложение сможет определить, вошел ли пользователь в систему или нет.

Так что если вы хотите перенаправить людей на статическую страницу, то это будет делом SPA. Так просто настройки window.location из вашего JavaScript должен нормально работать для перенаправления пользователей, если они не вошли в систему.

Но на самом деле может иметь смысл оставаться в СПА. В конце концов, вы можете просто показать отдельную страницу неавторизованным пользователям. И вам также следует подумать о том, что у вас должен быть способ, позволяющий пользователям фактически проходить аутентификацию! Поскольку аутентификация является чисто клиентской стороной, это, скорее всего, должно произойти в вашем SPA. Поэтому я не думаю, что вы хотите перенаправить людей от него, не давая им возможности войти в систему.

При этом, если вы действительно хотите статическую страницу, то вы можете просто поместить ее в wwwroot папка вашего основного приложения ASP.NET. Файлы там обслуживаются напрямую. Вы также можете использовать обычные страницы MVC или Razor для динамического отображения страницы, но, поскольку у вас ничего не настроено по умолчанию в шаблоне SPA, вы, вероятно, не захотите делать все это только для статической страницы.

Другие вопросы по тегам