Почему я не могу перехватить 401 и обработать истекший сеанс при вызове AJAX? - PullRequest
0 голосов
/ 31 марта 2020

В настоящее время я работаю над устаревшим программным обеспечением и сталкиваюсь с проблемой. Когда срок сеанса истек, и отправляется форма c формы, он пытается go на проверку # создать, возвращается с 401 и пытается выполнить просмотр индекса #. Проблема в том, что инспекции # индекс не существует. Когда сеанс заканчивается во всех остальных случаях, он перенаправляется на страницу входа. Я предполагаю, что без параметров из формы это неверно истолковывает маршрут к «/ инспекциям /». Кажется, это проблема с вызовами AJAX после истечения сеанса при использовании Devise.

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

Если вы можете отлаживать, вам нужно добавить точку останова здесь:

  unless Rails.application.config.consider_all_requests_local

    rescue_from Exception, with: lambda { |exception|
      if exception.class == CanCan::AccessDenied
        redirect_to root_path, notice: exception.to_s
      else
        Airbrake.notify(exception); render_error 500, exception
      end
    }
    rescue_from ActionController::RoutingError, ActionController::UnknownController, ::AbstractController::ActionNotFound, ActiveRecord::RecordNotFound, with: lambda { |exception| Airbrake.notify(exception); render_error 404, exception }
  end

Я думаю, что действие create не авторизовано для пользователя, поэтому оно пытается перенаправить на root_path, но root_path (индекс) не определен, поэтому вы 1) достигли кода redirect_to root_path, notice: exception.to_s, но по второму запросу 2) достигли этого кода: rescue_from ActionController::RoutingError, ActionController::UnknownController, ::AbstractController::ActionNotFound, ActiveRecord::RecordNotFound, with: lambda { |exception| Airbrake.notify(exception); render_error 404, exception }

Это может быть связано с областью действия: root_path на одном контроллере может быть действительным, потому что индекс определен, но на другом он не определен. Я бы сказал, проверьте ваши другие контроллеры, например, действия с индексами, чтобы увидеть, как они справляются с этим.

Дайте мне знать, что вы найдете:)

1 голос
/ 31 марта 2020

Извините, еще один запрос - вы можете опубликовать свой controllers / application.rb? (возможно, в папке / api /)

Не похоже, что он на самом деле реагирует на InspectionController # create - он просто вызывает упаковщик Devise, который, вероятно, находится в application.rb (или, по крайней мере, там указан).

Похоже, ваша модель аутентификации не только проверяет пользователя, но также проверяет клиента, версию и событие. Одним из них является то, что ваша оболочка Devise возвращается несанкционированным. Когда он это делает, он вызывает неопределенное индексное действие (не похоже, что оно перенаправляет, просто выполняет рендеринг).

Если я увижу оболочку аутентификации для контроллера, я смогу предоставить больше

(извините, это не ответ, но я не могу комментировать, пока моя репутация не повысится)

...