Сетка кендо не перенаправляет на страницу входа после окончания сеанса - PullRequest
0 голосов
/ 03 мая 2019

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

Я хочу, чтобы все запросы Ajax перенаправляли пользователя на страницу входа в систему по истечении срока его сессии / файла cookie вместо загрузки страницы входа в каждый контейнер частичного просмотра. Веб-приложение использует проверку подлинности с помощью форм.

Я реализовал это решение , и оно по большей части работает нормально.

Проблема в том, что перенаправление не работает, когда пользователь обновляет сетку Kendo, которая использует привязку Ajax. Я вижу запрос перенаправления на вкладке сети, но ничего не происходит. Я попытался реализовать собственный атрибут Authorize и изменить код состояния http, но среда ASP.NET не будет перенаправлять, если код не 401. Как я могу заставить перенаправление работать?

Вот мой пользовательский атрибут Authorize, который не работает. Я не уверен, что использование пользовательского атрибута - правильное решение.

public class AuthorizeUserAttribute : AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if (filterContext.HttpContext.Request.IsAjaxRequest())
        {
            if (filterContext.HttpContext.Request.IsAuthenticated)
            {
                filterContext.Result = new HttpStatusCodeResult(System.Net.HttpStatusCode.Forbidden);
            }
            else
            {
                filterContext.Result = new HttpStatusCodeResult(System.Net.HttpStatusCode.Unauthorized);
            }

            //filterContext.Result = new HttpStatusCodeResult(System.Net.HttpStatusCode.InternalServerError);
            //filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "account", action = "logon" }));
        }
        else
        {
            base.HandleUnauthorizedRequest(filterContext);
        }
    }
}

1 Ответ

1 голос
/ 03 мая 2019

Код, который вы разместили выше, будет работать, пока активен конвейер mvc.Проблема заключается в том, что вызовы AJAX могут полностью обойти ваш конвейер по разным причинам, так как вызов AJAX не представляет собой полную обратную передачу так же, как публикация формы.Возможно, вы можете заглянуть в глобальные обработчики ajax и проверить наличие аутентификации или ее отсутствие и перенаправить при необходимости.Насколько я помню, эти обработчики вызываются до любого из обработчиков результата "вниз".

 $(document).ajaxError(function (event, jqxhr, settings, data) {
          ...
 });
 $(document).ajaxSuccess(function (event, jqxhr, settings, exception) {
      ...
 }); 
...