Имитация .htaccess или другого типа защиты паролем с помощью webrick

У меня есть приложение rails, которое мне нравится разрабатывать на сервере гораздо больше, чем на локальном, медленном компьютере, проблема в том, что на сервере среда разработки отличная, мне нужен способ просматривать страницы, над которыми я работаю, вживую.

Это довольно просто, если бы я не заботился о том, чтобы приложение было видно публике, но оно не может быть видно нигде, кроме рабочего сервера.

Поэтому у меня возникла идея просто установить базовую httpauth, и тогда только я смогу увидеть приложение rails, но оно все еще размещено на сервере.

Если бы я делал это с apache/php, я бы просто использовал файл .htaccess для защиты каталога, но я понятия не имею, как защитить приложение от публики с помощью WEBrick.

Если у кого-то есть какие-либо идеи, я действительно хотел бы, чтобы код не менялся или менялся только код в файлах, которые я могу .gitignore, чтобы развертывание по-прежнему было простым.


person austinbv    schedule 15.11.2011    source источник
comment
Вы застряли на WEBrick или хотите настроить apache + пассажир? Тогда было бы просто использовать файл .htaccess или .passwd для базовой аутентификации. На мой взгляд, вы вообще не должны вводить в свое приложение какой-либо код, который зависит от WEBrick.   -  person emrass    schedule 20.11.2011
comment
Это для среды разработки, поэтому я не думаю, что пассажир - хорошая идея.   -  person austinbv    schedule 20.11.2011


Ответы (4)


Вы можете ограничить доступ, используя Rack на основе basic auth или IP white listing.

Базовая аутентификация

Добавьте следующее в свой config/environments/development.rb

config.middleware.use Rack::Auth::Basic, "Beta Access" do |username, password|
  'secret' == password
end

Белый список IP-адресов

Я нашел два драгоценных камня для этой цели:

rack-auth-ip

rack-ip-whitelist

Я бы использовал rack-auth-ip, так как он существует уже некоторое время. Добавьте следующее в свой config/environments/development.rb

config.middleware.use Rack::Auth::IP, %w( YourIPAddress )

Теперь экземпляр доступен только в том случае, если исходный IP-адрес находится в белом списке.

person Harish Shetty    schedule 21.11.2011
comment
Я добавил раздел для базовой аутентификации в свой ответ, посмотрите. - person Harish Shetty; 22.11.2011

Этот вопрос Ruby Webrick HTTP Authentication, кажется, дает ответ

Вот ссылка на некоторые документы Webrick. Похоже, вам нужно что-то вроде этого, по приведенной выше ссылке:

realm = "Gnome's realm"
start_webrick {|server|
  server.mount_proc('/convenient_basic_auth') {|req, resp| 
    HTTPAuth.basic_auth(req, resp, realm) {|user, pass|
      # this block returns true if
      # authentication token is valid
      user == 'gnome' && pass == 'supersecretpassword'
    }
    resp.body = 
      "You are authenticated to see the super secret data\n"
  }
}

и ссылку на rdocon WEBrick/ HTTP-аутентификация

config = { :Realm => 'DigestAuth example realm' }

htpasswd = WEBrick::HTTPAuth::Htpasswd.new    'my_password_file'
htpasswd.auth_type = WEBrick::HTTPAuth::DigestAuth
htpasswd.set_passwd config[:Realm], 'username', 'password'
htpasswd.flush
person Paul Rubel    schedule 18.11.2011
comment
Итак, для приложения rails 3.1 это потребует изменения драгоценного камня rails? - person austinbv; 19.11.2011

Извините, если я что-то здесь упустил, но почему встроенная в Rails базовая http-аутентификация не работает для вас?

class ApplicationController < ActionController::Base
  protect_from_forgery

  http_basic_authenticate_with :name => "dhh", :password => "hatezgroupon", :if => lambda { Rails.env.development? }
end
person twmills    schedule 24.11.2011

Если вы не застряли в использовании WEBrick, лучшим решением будет использование nginx, который проксирует unicorn. Вот хороший учебник: здесь

person LanguagesNamedAfterCofee    schedule 21.11.2011