Сообщение о таймауте сессии в RoR с использованием Devise

У меня есть приложение, защищенное с помощью devise и таймаутом сессии в 30 минут. С devise все работает хорошо для обычной навигации, если пользователь нажимает на ссылку, когда тайм-аут истекает, они перенаправляются обратно на экран входа с сообщением "Ваша сессия истекла, пожалуйста, войдите снова, чтобы продолжить.", отлично.

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

Пока у меня есть этот код jquery на каждой странице для перехвата 401 и перезагрузки:

$(document).ajaxError(function(e, error) {
  switch(error.status) {

    case 401: {
      // unauthorised (possible timeout)
      location.reload();
      break;
    }

Он работает достаточно хорошо, но есть раздражающая проблема:

Поскольку ajax запрос сначала попадает на devise, когда мое приложение перезагружает страницу, я попадаю на страницу входа, но я не вижу сообщения о таймауте, я вижу неаутентифицированное сообщение "You need to sign in or sign up before continue.".

Есть ли способ сделать так, чтобы при втором запросе devise все равно показывал сообщение о тайм-ауте?

5
задан Chris 27 January 2012 в 10:58
поделиться