Rails3 Разработка пользовательской маршрутизации для подтверждаемого модуля - PullRequest
4 голосов
/ 25 апреля 2011

Я пытаюсь направить пользователя на настраиваемую страницу приветствия после того, как он подтвердит свою учетную запись с помощью устройства devise.Пользовательская страница находится в / districts / setup /, доступная по districts_setup_path.

Для этого я добавил пользовательский маршрут,

  devise_for :users, :controllers => { :registrations => 'registrations', :confirmations => 'confirmations' }

и создал свой собственный контроллер.Тогда мне пришлось перегрузить файлфирмо подтверждения.sb и теперь у меня есть:

(app / controllers / translations_controller.rb)

class ConfirmationsController | Devise::ConfirmationsController

  # GET /resource/confirmation?confirmation_token=abcdef
  def show
    self.resource = resource_class.confirm_by_token(params[:confirmation_token])

    if resource.errors.empty?
      set_flash_message(:notice, :confirmed) if is_navigational_format?
      sign_in(resource_name, resource)
      redirect_to districts_setup_path
    else
      render_with_scope :new
      # not:
      # respond_with_navigational(resource.errors, :status => :unprocessable_entity){
    end
  end
end

Это работает хорошо, но я нервничаю, что не делаюэто в мрачной и надежной манере.В частности, я только что удалил строки response_with_navigational (...), которые я действительно не понимаю.

Я надеюсь написать все это в практических рекомендациях для вики Devise, и просто смотрюдля обратной связи, являющейся довольно новым для рельсов и еще более новым для Devise / Engineers / Warden.

1 Ответ

1 голос
/ 31 августа 2012

Взглянув на Devir's ConfirmationsController, вы можете обнаружить защищенный метод after_confirmation_path_for(resource_name, resource). Переопределение (а не всего действия) даст те же результаты с меньшими усилиями.

Вообще говоря, с переопределением контроллера Devise проблем нет, поскольку они представляют поведение по умолчанию, которое не всегда соответствует потребностям приложения. При этом вы должны принять несколько вещей, прежде чем переопределить код Devise:

  1. Devise - это не просто еще один компонент системы - он обрабатывает аутентификацию пользователей, что является очень деликатным вопросом. Убедитесь, что вы не нарушаете ничего важного, прежде чем совершить это. Вы можете сделать это, разветвив проект Devise из github, внеся изменения и запустив тесты.
  2. Когда вы вносите изменения, чтобы разработать и переопределить его код, вам будет сложнее перейти на более новую версию, что может быть несовместимо с вашими изменениями.
  3. Если вы решили внести изменение, ищите наименьшее возможное изменение для достижения своей цели. В большинстве случаев команда Devise уже предвидела необходимость настройки в определенных местах и ​​оставила методы (как вышеописанный), которые предназначены именно для этого. Опять же, просмотр кода файла на GitHub Devise даст вам хорошее представление о том, как лучше всего настроить его поведение в соответствии с вашими потребностями.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...