Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Where should warden callbacks be placed in a rails app?

Tags:

I'm relatively new to rails. I have Devise set up, and want to run some callback code after users sign in.

Looking at the Warden wiki page, I can use the "after_set_user" callback to perform this logic, for example:

Warden::Manager.after_set_user do |user, auth, opts|
  unless user.active?
    auth.logout
    throw(:warden, :message => "User not active")
  end
end

However, I'm not sure where I should be storing this stuff. My first thought is that I could put it in config/initializers/devise.rb. Is that correct? It doesn't feel right putting what is essentially controller code in the config directory.

like image 447
Adrian Macneil Avatar asked Sep 11 '11 02:09

Adrian Macneil


1 Answers

Warden hooks need to be required when your application is booting, so inside Devise's initializer at config/initializers/devise.rb is a good candidate.

However, the behavior you want to achieve will be better accomplished by using this Devise feature:

https://github.com/plataformatec/devise/wiki/How-To:-Customize-user-account-status-validation-when-logging-in

like image 59
José Valim Avatar answered Oct 04 '22 11:10

José Valim