Resque, Devise and admin authentication
Use a route constraint, in your routes.rb
file:
resque_constraint = lambda do |request|
request.env['warden'].authenticate? and request.env['warden'].user.admin?
end
constraints resque_constraint do
mount Resque::Server, :at => "/admin/resque"
end
in your routes.rb
file:
authenticate :user, lambda {|u| u.role == 'admin' } do
mount Resque::Server.new, :at => "/resque"
end
Also, make sure you have devise_for :users
somewhere in that file
You can try subclassing the Resque::Server class this way:
require 'resque/server'
class SecureResqueServer < Resque::Server
before do
redirect '/login' unless some_condition_is_met!
end
end
And using it in your routes this way:
mount SecureResqueServer.new, :at => '/resque'
I got this information from this blog. Give it a try.
There is always the new solution, type this in your routes.rb for rails > 3.1:
authenticate :admin do
mount Resque::Server.new, :at => "/resque"
end
And don't forget:
devise_for :admins