Подтвердить что ты не робот

Не удается обработать перенаправление 302 в ajax и почему?

У меня есть серверный сервер, написанный в asp.net mvc с использованием проверки подлинности с помощью форм. Когда пользователь не аутентифицирован, сервер автоматически отправит 302 перенаправление на действие "Вход" и вернет страницу входа.

На стороне клиента у меня есть список элементов. Этот список доступен только для аутентифицированных пользователей. На странице у меня есть кнопка для обновления списка с помощью Ajax (функция $.ajax jQuery).

Теперь моя проблема в том, что когда билет аутентификации является тайм-аутом, и пользователь нажимает кнопку "Обновить":

  • Моя функция отправляет запрос ajax для получения обновленного списка
  • Сервер обнаруживает, что билет проверки подлинности недействителен и выдает перенаправление 302.
  • Браузер автоматически обрабатывает этот ответ 302 и заставляет мою функцию ajax отправлять другой запрос ajax в действие Login, а конечным результатом является HTML со статусом 200. Мой script запутан, потому что list также является HTML со статусом 200.

То, что я хочу, - это когда билет проверки подлинности является тайм-аутом, и пользователь нажимает кнопку "Обновить", я должен иметь возможность обнаружить это и отобразить сообщение с запросом на вход в систему.

Я попытался обход этого путем добавления пользовательского заголовка (IS_LOGIN) в действие Login и проверить, что в моем ответе ajax. Но это нехорошее решение.

Итак, мои вопросы:

  • Каков наилучший способ решения этой проблемы?
  • Почему браузер не позволяет нашему дескриптору дескриптора script 302? и просто автоматически заставляет наш ajax создавать другой запрос. Это проблема с библиотекой браузера или jquery? Любые причины для этого? (безопасность,...)

Спасибо за любые ответы.

4b9b3361

Ответ 1

Вы не должны перенаправлять вызов, когда он XHR, но отвечаете с помощью 401 Unauthorized и обрабатываете это в своих обратных вызовах. Я не знаю ASP.NET, но я сделал что-то подобное с Spring Безопасность.

Вот понятие:

  • Получить аутентифицированное состояние
  • Проверьте заголовки на X-Requested-With: XMLHttpRequest
  • При обнаружении и отсутствии аутентификации ответьте 401 Unauthorized
  • Если не найден и не аутентифицирован перенаправлен.

Суть в том, что вызовы XHR нужно обрабатывать по-разному, а затем другие HTTP-запросы в некоторых случаях. Вы должны перенаправлять XHR только в том случае, если один и тот же ресурс находится в другом месте.

Чтобы ответить на ваш вопрос

Вы не можете обрабатывать переадресации с обратными вызовами XHR, потому что браузер автоматически их обслуживает. Вы вернетесь только в перенаправленном местоположении.