Информирование вызова ajax о том, что время ожидания сеанса истекло или пользователю требуется повторная аутентификация


Я прибил вызов для меня, который был возможностью войти и продолжить / сообщить пользователю об исключениях сервера, когда запрос ajax. Используя OnException в базовом контроллере и ища запрос, являющийся ajax, я могу вернуть настроенный"...готова" посмотреть, которые должны быть оказаны.

Теперь я сражаюсь с не аутентифицированной частью материала. Я борюсь с этим модифицированным кодом, который я думал использовать вместо атрибута [Authorize] в моей базе занятия.

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
    public class AjaxAuthorizeAttribute : AuthorizeAttribute
    {
        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            if (filterContext.HttpContext.Request.IsAjaxRequest())
            {
                filterContext.Result = new JsonResult{Data = new{NotAuthenticated=1}, JsonRequestBehavior = JsonRequestBehavior.AllowGet};
            }
            else
            {
                base.HandleUnauthorizedRequest(filterContext);
            }
        }
    }

В настоящее время существует несколько областей, где это может вернуть NotAuthenticatedas данные для Ajax-вызовов в клиенте. Правильно ли я поступаю? Просто расположены основные потоки, которые заканчиваются в Аяксе.

if(returnData.NotAuthenticated){
    if (that.onNotAuthenticated != null)
       that.onNotAuthenticated();
    else
      _loadView(viewElement, "Request requires authorization. Please login again.");
} else
      _loadView(viewElement, returnData);
}
Тем не менее, я использую полную библиотеку кендо и, возможно, другие. Существует ли лучший "глобальный" способ обработки тайм-аутов сессии или перенаправлений auth при запуске через вызов Ajax?

Пожалуйста, помогите!

1 3

1 ответ:

Я думаю, чтоGlobal Ajax Event Handlers отвечает вашим потребностям. Например, следующий код устанавливает глобальный обработчик ошибок, который перенаправит пользователя на страницу входа в систему, если ее сеанс является таймаутом.

$(document).ajaxError(function (event, jqxhr, settings, exception) {
    if (jqxhr.status == 401 || jqxhr.statusText == "Unauthorized") {
        window.location.href = '/login';
    }
});