Sinatra HTTP Auth:每个子域的用户名/密码不同

时间:2017-10-02 21:37:47

标签: sinatra

我已经对我们的Sinatra应用程序实施了HTTP授权,但现在我正在尝试为我们的应用程序的每个子域配置不同的用户名/密码。例如:user1.mydomain.com使用与user2.mydomain.com不同的凭据。我需要在运行我的应用程序之前配置此配置,但在运行我的应用程序之前,我无权访问request.host。关于我应该做什么的任何想法?

require 'sinatra'

class MyApp < Sinatra::Base
  before do
    hostname = request.host
    namespace = hostname.gsub(".mydomain.com", "")
    unless namespace.empty?
      dir = File.dirname(File.expand_path(__FILE__))
      auth_file = "#{dir}/config/auth/#{namespace}.yml"
      if File.exist?(auth_file)
        credentials = YAML.load_file(auth_file)
        use Rack::Auth::Basic do |username, password|
          username == credentials['username'] && password == credentials['password']
        end
      end
      redis = Redis.new(url: YAML.load_file("#{dir}/config/redis.yml")['url'])
      Split.redis = Redis::Namespace.new(namespace.to_sym, redis: redis)
    end
  end

  get '/' do
    # serve dashboard
  end
end

run MyApp

0 个答案:

没有答案