Basic authen for mount route in rails app!

Problem

  • Mình sẽ có một số trường hợp dùng mount route, như docs, sidekiq, rails-admin.
# route.rb
unless Rails.env.production?
  mount Rswag::Ui::Engine => '/api-docs'
  mount Rswag::Api::Engine => '/api-docs'
  mount Sidekiq::Web => '/sidekiq'
end

Solution (cho trường hợp dùng rswag)

Đối với trường hợp user cần phải login

  • thì sẽ rất dễ, chỉ cần authen với Devise gem là được . Nếu chưa login sẽ redirect tới màn login.
# route.rb
authenticate :user, ->(user) { user.admin? } do
    mount Sidekiq::Web => '/sidekiq'
end

Đối với những trường hợp không có login, làm sao authen

  • mong muốn có thể show popup nhập username/password kiểu basic authen
  • Dùng constraint (vẫn chưa tìm được cách)
Tagged with rails