Попытка установить root для devise / session # новые результаты в ошибке отображения маршрутов - PullRequest
1 голос
/ 16 января 2012

Сумасшедший с проблемой здесь :-(

Мое требование следующее,

  1. Если пользователь посещает myapp.com, по умолчанию корень моего приложения по умолчаниюна рекламные страницы и форму регистрации. Это достигается путем проверки наличия субдомена.

  2. Если пользователь не вошел в систему и пытается зайти в свою учетную запись на test.myapp.com они будут направлены на test.myapp.com/users/sign_in -aka- devise / session # new

  3. Если пользователь вошел в систему (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

Ответы [ 2 ]

3 голосов
/ 27 марта 2013

Без ограничения это приведет к ошибке Could not find devise mapping для пути "/". Это простое дополнение исправило это.

devise_scope :user do 
    authenticated :user do
      root :to => 'dashboard#index'
    end
    unauthenticated :user do
      root :to => 'devise/sessions#new'
    end
    root :to => 'dashboard#index'
end
1 голос
/ 16 января 2012

У меня это отсортировано,

Хорошо, во-первых, причина, по которой я получил ошибку devise, заключалась в том, что мне нужно было поместить корневой оператор devise в блок "devise_for: users"

Во-вторых, Проверка подлинности не работала, потому что я не смог включить область действия, поскольку у меня возникло ошибочное впечатление, что в этом нет необходимости.

Вот окончательный код, обратите внимание, что в маршрутизации рельсов приоритет основан на порядке создания, первый созданный имеет наивысший приоритет. Таким образом, в этом случае контроллер promo_pages считается корневым, если ничего ранее не было указано.

constraints(Subdomain) do
  authenticated :user do
    root :to => 'dashboard#index'
  end

  unauthenticated :user do
    root :to => 'devise/sessions#new'
  end
end
root :to => 'promo_pages#index'
...