Rails - devise和sidekiq路由

14

我正在运行一个使用Ruby 2.3.1的Rails 5.0.0应用程序。

后台作业使用Sidekiq,认证使用devise。

Sidekiq监控和devise在路由中的挂载方式如下:

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

然而,访问Sidekiq状态页面会使用户退出登录。

在Rails 4.2.5中,相同的代码可以正常工作。


我会在这些宝石的 Github 存储库中进行搜索。Rails 5.0 和 Ruby 2.3 非常新,它们可能与这些宝石不完全兼容。 - lcguida
如果需要紧急修复,您可以删除设备并使用bcrypt自己进行身份验证,因为这似乎对5.0有效。 - bkunzi01
2个回答

14

尝试将你的 Sidekiq 的挂载放在 devise_scope 下,就像你在 devise_for 路由中使用它的别名 "as" 一样:

# 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

5
这里有一个片段,允许在Sidekiq路由上进行自定义身份验证。
authenticate :user, ->(user) { user.admin? || Other auth related checks... } do
  mount Sidekiq::Web => "/sidekiq"
end

有没有关于如何在rspec中测试这个的文档或示例? - user2012677
对于那些寻求此功能的人,以下是关于路由身份验证支持的官方文档:
  • https://github.com/heartcombo/devise/wiki/How-To:-Define-resource-actions-that-require-authentication-using-routes.rb
  • https://github.com/heartcombo/devise/blob/ec0674523e7909579a5a008f16fb9fe0c3a71712/lib/devise/rails/routes.rb#L274-L294
- LouieGeetoo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接