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





В моем приложении на стороне клиента я проверяю HTTP-статус возвращаемой страницы. Если это 401 (несанкционированная ошибка), я представляю форму входа в модальном диалоговом окне. Вы можете повторно пройти аутентификацию таким образом или просто перенаправить, используя
window.location = 'http://someurl.com';
Это требует сотрудничества с сервером, чтобы вернуть 401, но мне кажется, что это самый чистый способ.
Смотрите мой ответ, почему я думаю, что вы не можете.
См. Мой ответ о том, почему это возможно в недавней версии .NET 3.5.
Недавно я разработал метод обработки ошибок 401, который, я думаю, сработает и для вас. Проблема в прошлых версиях .NET заключается в том, что страницы ошибок не возвращают правильный код ошибки, они просто 302 на указанную страницу.
В .NET 3.5 ваш обработчик ошибок может «переписывать» вместо «перенаправления» с помощью redirectMode:
<customErrors mode = "On" defaultRedirect = "/err.aspx" redirectMode = "ResponseRewrite">
<error statusCode = "404" redirect = "/404.aspx"/>
</customErrors>
Поскольку все запросы (включая вызовы веб-служб) теперь будут возвращать правильный код состояния HTTP, вы можете правильно использовать код 404/401/500 в своем javascript.
Затем в вашем клиентском коде (он находится в jQuery и перенаправляет любые ошибки, а не только 401, но вы поняли идею):
$(document).ajaxError(function(event, XMLHttpRequest, ajaxOptions, thrownError) {
window.location.href('/error.aspx');
});
Похоже, это не меняет способ работы перенаправления проверки подлинности с помощью форм. Вы пробовали это?
Да, он работает, как описано здесь. Обратите внимание, что для этого требуется, чтобы приложение работало с .NET 3.5. В 2.0 это не сработает.
Звучит неплохо, но как мне заставить мое приложение возвращать 401, а не 200 и страницу входа?