JWT Auth with Rails Sidekiq 管理面板

JWT Auth with Rails Sidekiq admin panel

我正在尝试使用我现有的身份验证系统来保护 /sidekiq 路由。我在 Rails-api 中使用 JWT。我能够读取 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 会话。

Is there some way I can persist the token for subsequent requests?

这不能t/shouldn在您的路线限制范围内完成。

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

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