我已经对我们的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