#ruby-on-rails #devise
#ruby-on-rails #разработка
Вопрос:
Из чтения кода devise и wiki кажется, что нет возможности перенаправить пользователя на страницу регистрации, если пользователь не вошел в систему. В lib/devise/failure_app.rb, похоже, что URL перенаправления жестко закодирован.
def redirect_url
opts = {}
route = :"new_#{scope}_session_path"
opts[:format] = request_format unless skip_format?
if respond_to?(route)
send(route, opts)
else
root_path(opts)
end
end
Я хочу спросить, что это лучшая практика для выполнения работы. Я подумываю о том, чтобы вручную установить значение user_return_to session, а затем вызвать страницу регистрации. Это хорошая практика?
Ответ №1:
Я думаю, что наилучшей практикой в этой ситуации является следование этой вики-странице devise: https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-when-the-user-can-not-be-authenticated
Комментарии:
1. Я не понимаю эту страницу wiki, можете ли вы немного объяснить, я новичок в rails, я хочу показать страницу входа, если пользователь не вошел в систему
2. В связанной статье есть другая (лучшая) ссылка, на которую она ссылается, смотрите Здесь: github.com/plataformatec/devise/wiki /…
Ответ №2:
В последней версии Devise рекомендуется следовать этим инструкциям:
Для этого определите пользовательское приложение с ошибкой с помощью метода route, который возвращает символ, представляющий именованный маршрут для перенаправления:
# app/lib/my_failure_app.rb
class MyFailureApp < Devise::FailureApp
def route(scope)
:new_user_registration_url
end
end
Затем внутри инициализатора Devise укажите ваше приложение с ошибкой:
# config/initializers/devise.rb
config.warden do |manager|
manager.failure_app = MyFailureApp
end
Загрузите каталог lib
config.autoload_paths << Rails.root.join('lib')