Nikhil M Nikhil M - 1 year ago 78
Ruby Question

Rails - devise and sidekiq routes

I am running a Rails 5.0.0 app with Ruby 2.3.1

Sidekiq is being used for background jobs and devise for authentication.

Sidekiq monitoring and devise are mounted in routes as follows:

devise_for :users, skip: [:sessions]
as :user do
get 'login' => 'devise/sessions#new', :as => :new_user_session
post 'login' => 'devise/sessions#create', :as => :user_session
delete 'logout' => 'devise/sessions#destroy', :as => :destroy_user_session
end

require 'sidekiq/web'
require 'sidekiq/cron/web'
#Sidekiq::Web.set :session_secret, Rails.application.secrets[:secret_key_base]
authenticate :user do
mount Sidekiq::Web => '/sidekiq'
end


But, accessing the sidekiq status page logs out the user.

The same code used to work fine with Rails 4.2.5

Answer Source

Try wrapping your mounting of Sidekiq under devise_scope, in the same way you're using its alias "as" in your devise_for route:

# Only allow authenticated users to get access
# to the Sidekiq web interface
devise_scope :user do
  authenticated :user do
    mount Sidekiq::Web => '/sidekiq'
  end
end