rails:3 Devise signup Filter chain halted as :require_no_authentication rendered or redirected

urjit on rails picture urjit on rails · Mar 9, 2012 · Viewed 36.9k times · Source

I am using Devise in my site I create admin namespace and giving functionality of create user by admin.
my routes are as under

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

when i click on add_user link which has signup_path causing following error:

My Error

 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)

I think it going to the devise registration controller but due to following line it cause an error in devise registration controller

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

Answer

Rodrigo Flores picture Rodrigo Flores · Mar 11, 2012

The mentioned line on Devise's Controller makes sense in general cases: a logged in user can't sign up. As you're on a case where only an admin can create a user, I would suggest that you don't use Devise's controller on Registerable module and write your own controller with your own rules. You can write it based on Devise's controller changing only the mentioned line.

If you want to use it, try skipping the before_filter with skip_before_filter. I don't think it is the best solution. and I would write my own controller.