Как добавить исключение в мой файл маршрута для некоторых имен тщеславия при использовании драгоценного камня Vanity? - PullRequest
0 голосов
/ 19 сентября 2011

Так что я использую драгоценный камень Vanity, который обрабатывает все params[:vname] в моих URL и перенаправляет в нужное место для большинства vnames.

Но я только что добавил аутентификацию через Omnipopulus - https://github.com/icelab/omnipopulus - и мне нужно перейти на `mydomain.com/login'.

Но когда я это делаю, он отправляет его на мой Vanities контроллер. Вот журнал этого запроса:

Started GET "/login" for 127.0.0.1 at 2011-09-18 16:39:15 -0500
  Processing by VanitiesController#show as HTML
  Parameters: {"vname"=>"login"}
  Vanity Load (0.1ms)  SELECT "vanities".* FROM "vanities" WHERE "vanities"."name" = 'login' LIMIT 1
Rendered public/404.html within layouts/application (0.0ms)
Completed 404 Not Found in 13ms (Views: 11.5ms | ActiveRecord: 0.3ms)

Что делает контроллер Vanities, когда он получает URL-адрес как mydomain.com/vname, он проверяет, существует ли запись vname для значения в параметрах (обычно это имя пользователя). Если он находит его, он перенаправляет на действие show этого пользователя. Но, учитывая, что login не является ни пользователем, ни именем пользователя, он не должен обрабатывать маршрутизацию для этого ключевого слова.

Как добавить исключение?

Это маршрут для контроллера Vanities:

 controller :vanities do 
    match ':vname' => :show, :via => :get, :constraints => {:vname => /@?[A-Za-z0-9\-\+]+/}, :as => :vanity
  end

1 Ответ

0 голосов
/ 19 сентября 2011

Я никогда раньше не использовал (или даже не слышал) об этом геме, но, глядя на его исходный код, смотрите: https://github.com/icelab/omnipopulus/blob/master/config/routes.rb

Похоже, он устанавливается как движок Rails и поэтому не является 'действительно в вашем файле rout.rb.Я думаю, что здесь может быть несколько вещей для тестирования.

Прежде всего, поймите, что маршруты тщеславия ДОЛЖНЫ быть АБСОЛЮТНЫМ МЕРТВЫМ ПОСЛЕДНИМ в вашем файле маршрутов.Здесь происходит то, что когда вы звоните / входите в систему, маршрутизация тщеславия происходит до вызова маршрутизации вашего драгоценного камня аутентификации.Обычно я бы просто сказал: «переместить маршруты тщеславия на последний путь в rout.rb», но, учитывая, что всепопулярный вводит свои маршруты на основе своего движка, этого может быть недостаточно.

Я вижу два возможных путирешения этой проблемы:

  1. Проверьте Gemfile и убедитесь, что ПО Vanities загружено ПОСЛЕ всепопулярного.
  2. Если это не удастся, скопируйте маршруты по ссылке, которую я разместил выше, в route.rb ПЕРЕДмаршруты тщеславия.

Я вижу # 2 как уродливый хак, поэтому я действительно надеюсь, что # 1 работает в первую очередь (зависит от порядка загрузки драгоценных камней с компоновщиком, который, я думаю, будет идти сверху вниз, ноПока у меня нет никаких доказательств этого).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...