рельсы: 3 Разработка подписи Фильтр цепочки остановлен как: require_no_authentication визуализации или перенаправления - PullRequest
33 голосов
/ 09 марта 2012

Я использую Devise на своем сайте, я создаю пространство имен администратора и предоставляю функции создания пользователя администратором.
мои маршруты как под

devise_for :users,:has_many => :comments, :controllers => {:sessions =>'devise/sessions',:registrations => 'devise/registrations'} do    
  get "/login", :to => "devise/sessions#new", :as => :login  

  get "/signup", :to => "devise/registrations#new", :as => :signup     

  get "/logout", :to => "devise/sessions#destroy", :as => :logout
end

когда я нажимаю на ссылку add_user с signup_path, вызывающую следующую ошибку:

Моя ошибка

 Started GET "/signup" for 127.0.0.1 at Fri Mar 09 12:49:11 +0530 2012    
 Processing by Devise::RegistrationsController#new as HTML    
 User Load (0.1ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 35 LIMIT 1    
 Redirected to http://localhost:3000/admin     
 Filter chain halted as :require_no_authentication rendered or redirected
 Completed 302 Found in 3ms (ActiveRecord: 0.1ms)

Я думаю, что это происходит с контроллером регистрации устройства, но из-за следующей строки это вызывает ошибку в контроллере регистрации устройства

prepend_before_filter :require_no_authentication, :only => [ :new, :create, :cancel ]

Ответы [ 4 ]

31 голосов
/ 11 марта 2012

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

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

8 голосов
/ 23 февраля 2014

Я получил следующую ошибку в моем журнале разработки.

Filter chain halted as :require_no_authentication

Был создан бесконечный цикл, потому что dev_sign_in_path_for devise в application_controller.rb перенаправлял обратно на предыдущую страницу с

stored_location_for(resource)

Придумайте пароль для пользователя при редактировании пароля.

6 голосов
/ 12 сентября 2014

Как и вы, я хотел, чтобы пользователь с правами администратора мог добавлять новых пользователей. Но я не хотел связываться с Devise Registerable, так как на самом деле я хотел, чтобы пользователи все еще могли зарегистрироваться. У меня есть несколько администраторов с правами на добавление нового пользователя, поэтому я создал дополнительные методы в моем контроллере пользователей и дополнительные представления для обработки этого случая.

На мои дополнительные методы не ссылается prepend_before_filter: require_no_authentication от Devise, поэтому они не получают ошибку.

Мой рецепт:

В app / controllers / users_controller.rb (или любом другом объекте, для которого вы используете устройство): Скопируйте новые, создайте и обновите методы и переименуйте копии в admin_new, admin_create и admin_update.

В app / views / users скопируйте new.html.erb в admin_new.html.erb. Измените частичное, указав вместо admin_form форму:

 <%= render 'admin_form' %>

Затем скопируйте частичный _form.html.erb в _admin_form.html.erb. В _admin_form.html.erb измените form_for, чтобы использовать другой URL:

form_for(@user, :url => '/users/admin_create')

Добавьте маршруты в config / rout.rb, чтобы указать альтернативные методы в пользовательском контроллере:

devise_scope :user  do
    ...
    get  'users/admin_new' => 'users#admin_new'
    post 'users/admin_create' => 'users#admin_create'
end

Теперь вы можете добавлять пользователей, когда вы вошли в систему, перейдя в / users / admin_new, и пользователи по-прежнему могут создавать своих собственных пользователей (зарегистрироваться), используя механизм разработки, который вас не беспокоил.

5 голосов
/ 07 марта 2015

Привет, ребята, у меня есть еще более простое решение:

prepend_before_filter :require_no_authentication, only: [:cancel ]

Удаляя :new, :create из prepend_before_filter, он переопределяет исходный код и решает проблему. У меня была такая же проблема, и она решила мою проблему.

...