Rails - devise and sidekiq routes
Asked Answered
T

2

14

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

Tinsley answered 3/8, 2016 at 11:20 Comment(2)
I would search through these gems github repositories. Rails 5.0 and ruby 2.3 are very recent, they may not be fully compatible with the gems.Toting
If an urgent fix is needed you can remove devise and roll your own auth with bcrypt since that seems to be working fine for 5.0.Scaremonger
P
14

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
Psychokinesis answered 4/8, 2016 at 11:41 Comment(0)
W
5

Here's a snippet for that allows for custom authentication on the Sidekiq routes.

authenticate :user, ->(user) { user.admin? || Other auth related checks... } do
  mount Sidekiq::Web => "/sidekiq"
end
Westley answered 2/3, 2021 at 15:6 Comment(2)
Any documentation or examples on how to test this in rspec?Infantine
For those seeking such, here are the official docs around this route authentication support: - github.com/heartcombo/devise/wiki/… - github.com/heartcombo/devise/blob/…Aerial

© 2022 - 2024 — McMap. All rights reserved.