Параметры MVC Core 3.0.LoginPath - добавить параметр маршрута локализации - PullRequest
0 голосов
/ 23 октября 2019

У меня есть следующий код внутри Startup - ConfigureServices:

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
                .AddCookie(options =>
                {

                    options.LoginPath = new PathString("/en/Authentication/LogIn");
                });

Все отлично работает, но я не могу найти способ сделать LoginPath локализуемым с помощью параметра URL (en / de / es и т. Д.)

Мой MapControllerRoute выглядит следующим образом:

"{lang}/{controller=Home}/{action=Index}/{id?}"

Можно ли перенаправить на соответствующий язык для аутентификации, как если бы пользователь обращался к / de / NeedAuth / Index - его следует перенаправить на / de / Authentication/ Вход?

1 Ответ

0 голосов
/ 23 октября 2019

Хорошо. Я потратил час, и вот решение - на случай, если у кого-то будет похожий вариант использования.

Шаг 1. Создание нового класса, который будет динамически получать текущие http-запросы для определения перенаправления:

public class CustomCookieAuthenticationEvents : CookieAuthenticationEvents
    {
        public override Task RedirectToLogin(RedirectContext<CookieAuthenticationOptions> context)
        {
            var httpContext = context.HttpContext;

            var routePrefix = httpContext.GetRouteValue("lang");

            context.RedirectUri = $"/{routePrefix.ToString()}/Authentication/LogIn";
            return base.RedirectToLogin(context);
        }
    }

Шаг 2: В Startup изменение декларации аутентификации cookie, которая относится к перенаправлению на страницу аутентификации:

services.AddScoped<CustomCookieAuthenticationEvents>();
            services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
                .AddCookie(options =>
                {
                    options.LoginPath = new PathString("/Authentication/LogIn");
                    options.EventsType = typeof(CustomCookieAuthenticationEvents);
                });

Обратите внимание на регистрацию CustomCookieAuthenticationEvents в качестве службы выше.

...