Информирование вызова 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 ответ:
Я думаю, что
Global Ajax Event Handlers
отвечает вашим потребностям. Например, следующий код устанавливает глобальный обработчик ошибок, который перенаправит пользователя на страницу входа в систему, если ее сеанс является таймаутом.$(document).ajaxError(function (event, jqxhr, settings, exception) { if (jqxhr.status == 401 || jqxhr.statusText == "Unauthorized") { window.location.href = '/login'; } });