Рад, что мог как-то помочь тебе!Вы проделали потрясающую работу, анализируя весь процесс создания цикла!
Тем не менее, я думаю, что вы имеете дело либо с очень глубокой вложенной ошибкой, либо разработали неправильную настройку.Я протестировал его на большом проекте, и он работал просто отлично.
В Devise.rb я раскомментировал:
config.timeout_in = 10.seconds
и изменил для целей тестирования тайм-аут на 10 секунд.
У меня есть страница часто задаваемых вопросов об этом проекте, которая имеетpage_controller.Внутри page_controller я добавил:
before_action :authenticate_user!
Внутри моей модели Devise, в данном случае Пользователь, я добавил:
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:omniauthable, :timeoutable
Когда я войду в систему, перейдите на страницу FAQ, подождитев течение 10 секунд обновите страницу, меня перенаправят на страницу входа и сообщение о том, что сеанс истек.Когда я снова вхожу в систему, меня перенаправляют на страницу часто задаваемых вопросов, без какого-либо дополнительного кода, кроме тех нескольких шагов, которые я показал выше.
Поток (который вы, вероятно, понимаете намного лучше меня) выглядит следующим образом: Проверьте, вошел ли пользователь в систему -> если нет, перенаправьте.Теперь редирект не имеет ничего общего с модулем: timeoutable.Модуль: timeoutable «просто» производит обратный отсчет и проверяет, является ли сеанс пользователя действительным, если нет, то он выходит из системы пользователя в фоновом режиме.Если пользователь хочет попробовать страницу, чем снова, он использует: authenticate_user!Метод, проверяет, вошел ли пользователь в систему, если нет, ну перенаправьте его.
Похоже, что вы authenticate_user!не работает так, как должно.Вы пытались (в разработке) обновить устройство?
Я настоятельно рекомендую вам создать супер простое приложение с devise и повторить шаги, описанные выше, и посмотреть, работает ли оно так, как вы хотели.
Часть redirect_url обычно внедряется за кулисыпридумать, насколько я знаю.
Однажды я оценил его для приложения, перейдя к config/initializers/devise.rb
внутри Devise.setup |config|
require "custom_path"
config.warden do |manager|
manager.failure_app = CustomPath
end
чем в lib/custom_path.rb
class CustomPath < Devise::FailureApp
def redirect_url
## redirect to wherever you want
end
end
вот и все.Затем Devise перенаправит на любую страницу, которую вы хотите.
В любом случае, рад, что вы все еще можете решить проблему, настроив некоторые части в промежуточном программном обеспечении.
Привет!