Сумасшедший с проблемой здесь :-(
Мое требование следующее,
Если пользователь посещает myapp.com, по умолчанию корень моего приложения по умолчаниюна рекламные страницы и форму регистрации. Это достигается путем проверки наличия субдомена.
Если пользователь не вошел в систему и пытается зайти в свою учетную запись на test.myapp.com они будут направлены на test.myapp.com/users/sign_in -aka- devise / session # new
Если пользователь вошел в систему (devise) и посетил test.myapp.com корнем приложения будет панель инструментов приложения.
Вот что я пытаюсь использовать в моих маршрутах. rb
constraints(Subdomain) do
authenticated do
root :to => 'dashboard#index'
end
root :to => 'devise/sessions#new'
end
root :to => 'promo_pages#index'
В настоящее время у меня естьниже вы заметите, что бит разработки не включен.
constraints(Subdomain) do
authenticated do
root :to => 'dashboard#index'
end
end
root :to => 'promo_pages#index'
Моя проблема с последним заключается в том, что когда пользователь, который не вошел в систему, впервые посещает test.myapp.com, он перенаправляется на тестирование..myapp.com / users / sign_in и отображается сообщение об ошибке «Вам нужно подписатьn или зарегистрируйтесь, прежде чем продолжить. "Это потому, что я применяю требование входа в систему для страниц панели мониторинга.
Однако я не хочу, чтобы пользователь получал сообщение об ошибке при первом посещении страницы,так как это уродливо и заставляет выглядеть так, будто они что-то сделали неправильно, если они этого не сделали.
Я ожидаю, что если пользователь не вошел в систему, то он будет перенаправлен прямо на страницу входа и не получитуведомление об ошибке.Но когда я использую мою исправленную версию, происходит следующее, я могу нормально зайти на myapp.com, и он перенаправляется на промо-страницы, но если я пытаюсь зайти на test.myapp.com, в браузере появляется следующее сообщение
**Unknown action**
Could not find devise mapping for path "/". Maybe you forgot to wrap your route inside the scope block? For example: devise_scope :user do match "/some/route" => "some_devise_controller" end
Пожалуйста, сообщите, что я делаю неправильно (если что-нибудь), так как я собираюсь взломщиков, пытающихся понять, что делать.
Ps: я обнаружил похожие ошибки в stackoverflow и различных поисках, но решения простоне похоже на работу для меня.Я ожидаю, что решение проблемы заключается в сообщении об ошибке, которое я включил выше, но я не могу понять, как его применить.
Наконец, вот версия записи об ошибке выше, этонаходится в более легкой для чтения форме.
Started GET "/" for 127.0.0.1 at 2012-01-15 21:44:42 +0000
Processing by Devise::SessionsController#new as HTML
[Devise] Could not find devise mapping for path "/".
Maybe you forgot to wrap your route inside the scope block? For example:
devise_scope :user do
match "/some/route" => "some_devise_controller"
end
Completed 404 Not Found in 1ms
AbstractController::ActionNotFound (Could not find devise mapping for path "/".
Maybe you forgot to wrap your route inside the scope block? For example:
devise_scope :user do
match "/some/route" => "some_devise_controller"
end
):
Вся помощь приветствуется, и могут быть предоставлены дополнительные детали.
Спасибо за чтение
Обновление
Я только что заметил, что проверка подлинности не работает.Если бы он работал правильно, то при использовании второй партии рабочего конфига вошедший в систему пользователь, посещающий test.myapp.com, всегда будет направлен на promo_pages, тогда как в данный момент он может получить доступ к панели мониторинга.
Я нашел здесь метод «аутентификации» https://github.com/plataformatec/devise/pull/1147