JWT Auth与Rails Sidekiq管理面板

时间:2017-12-12 16:29:14

标签: ruby-on-rails jwt sidekiq rails-api

我正在尝试使用现有的身份验证系统来保护/sidekiq路由。我正在使用JWT和Rails-api。我能够读取JWT令牌以检查用户是否具有管理员角色,但它仅适用于初始请求。 Sidekiq面板中的后续请求检索CSS和JS,但它们失败,因为令牌未传递给它们。

我的routes.rb中有以下路线:

mount Sidekiq::Web => '/sidekiq', constraints: AdminConstraint.new

然后lib/admin_constraint.rb

class AdminConstraint
  def matches?(request)
    token = request.params['token']
    unless token
      puts 'AdminConstraint: No token in params found'
      return false;
    end

    user = Knock::AuthToken.new(token: token).entity_for(User)
    unless user
      puts "AdminConstraint: No user found for token #{token}"
    end

    if user.admin?
      puts "AdminConstraint: User with user_id #{user.id} is an admin, access granted"
      true
    else
      puts "AdminConstraint: User with user_id #{user.id} is NOT an admin, rejecting"
      false
    end
  end
end

我正在我的浏览器中访问该路线,如下所示:https://example.com/sidekiq?token=<token>

我是否可以通过某种方式为后续请求保留令牌?我似乎无法在此lib文件中使用Rails会话。

1 个答案:

答案 0 :(得分:1)

  

我是否可以通过某种方式为后续请求保留令牌?

这不能/不应该在您的路线中的约束内完成。

您需要提供另一个端点,该端点在会话中设置一些内容以显示会话已经过身份验证,然后您将在路由约束中进行检查。

这可以在控制器或机架中间件中完成。