Перенаправление ASP.NET 5/MVC 6 во время событий промежуточного ПО аутентификации

Я хочу создать запись в базе данных и перенаправить пользователя на специальную страницу при первом входе на сайт, независимо от исходного URL-адреса запроса. Последующие входы в систему должны обновить последнее зарегистрированное поле в базе данных.

Я использую внешний источник аутентификации с Cookie Authentication. Кажется интуитивным делать эти вещи во время OnSignedIn событие для проверки подлинности cookie. Части базы данных этого процесса работают нормально. Проблема с перенаправлением на специальную целевую страницу во время их первого входа.

Вот как настроена проверка подлинности с помощью cookie:

app.UseCookieAuthentication(options =>
{   
    options.AuthenticationScheme = "Cookies";
    options.AutomaticAuthenticate = true;
    options.AutomaticChallenge = true;

    options.LoginPath = "/login";
    options.AccessDeniedPath = "/access-denied";

    options.Events = new CookieAuthenticationEvents
    {
        OnSignedIn = context =>
        {
            var userRecord = userService.GetUser(context.Principal.Identity.Name);

            if (userRecord == null)
            {
                userService.CreateUser(context.Principal.Identity.Name);

                // Does set a cookie successfully.
                context.Response.Cookies.Append("FirstTimeUser", "true");   
                // Does not redirect but continues on to the originally requested URL.
                context.Response.Redirect("/special-first-timer-page");     
            }
            else
            {
                userService.RecordLogin(userRecord);
            }

            return Task.FromResult(0);
        }
    };
});         

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

app.Use(async (context, next) =>
{
    if (context.Request.Cookies.ContainsKey("FirstTimeUser"))
    {
        context.Response.Cookies.Delete("FirstTimeUser");
        context.Response.Redirect("/special-first-timer-page");
    }

    await next();
});

app.UseCookieAuthentication(options =>
{
    ...

    options.Events = new CookieAuthenticationEvents
    {
        OnSignedIn = context =>
        {
            var userRecord = userService.GetUser(context.Principal.Identity.Name);

            if (userRecord == null)
            {
                userService.CreateUser(context.Principal.Identity.Name);
                context.Response.Cookies.Append("FirstTimeUser", "true");
            }
            else
            {
                userService.RecordLogin(userRecord);
            }

            return Task.FromResult(0);
        }
    };
});

Это работает, но не кажется идеальным. Можно ли успешно перенаправить во время события промежуточного программного обеспечения аутентификации? Я пропускаю точку, даже пытаясь это сделать?

0 ответов

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