Есть ли способ настроить простую http-аутентификацию для приложения на heroku? - PullRequest
26 голосов
/ 01 октября 2010

Я хочу настроить частный промежуточный сервер на героку с помощью простой http-аутентификации. Это возможно?

Ответы [ 6 ]

52 голосов
/ 15 июня 2011

Более понятный способ - просто вставить пару строк промежуточного ПО Rack в конфигурацию промежуточной среды, оставив только логику контроллера:

# config/environments/staging.rb
MyApp::Application.configure do
  config.middleware.insert_after(::Rack::Lock, "::Rack::Auth::Basic", "Staging") do |u, p|
    [u, p] == ['username', 'password']
  end

  #... other config
end

Этот совет любезно предоставлен Оле Мортеном Амундсеном.Дополнительная информация плюс спецификация пароля Heroku:

http://olemortenamundsen.wordpress.com/2011/04/05/ruby-secure-staging-environment-of-your-public-app-from-users-and-bots/

14 голосов
/ 29 августа 2013

На Rails4 я получил сообщение «Нет такого промежуточного программного обеспечения для вставки после ошибки: Rack :: Lock».Замените код Адама на следующий:

# config/environments/staging.rb
MyApp::Application.configure do
  config.middleware.use '::Rack::Auth::Basic' do |u, p|
    [u, p] == ['username', 'password']
  end
  # ...
end

См .: http://www.intridea.com/blog/2013/6/4/tips-and-tricks-for-deploying-rails-4-apps-on-heroku

7 голосов
/ 01 октября 2010

Абсолютно. Самое простое решение - просто поместить что-то в контроллер приложения, использующий встроенную базовую поддержку аутентификации Rails (см. Здесь: http://railscasts.com/episodes/82-http-basic-authentication), и просто обернуть это в условное обозначение для Rails.env. Обратите внимание, что в Heroku по умолчанию RAILS_ENV настроен на работу, но вы можете изменить это для ваших непроизводственных приложений, используя heroku config (http://docs.heroku.com/config-vars).

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

2 голосов
/ 22 января 2014

Есть хорошее дополнение к heroku, которое использует Mozilla Persona для аутентификации.Это бесплатно для небольших сайтов (до 10 000 аутентификаций в месяц):

https://addons.heroku.com/wwwhisper

Очень прост в установке и настройке.

1 голос
/ 20 июля 2018

Обновленный ответ для Rails 5. В вашей config/application.rb или выбранной конфигурации среды:

config.middleware.use(Rack::Auth::Basic) do |u, p|
  [u, p] == ["user", "password"]
end

Кроме того, в сообщении блога Оле указано, что использовать ENV vars.Я бы добавил, что по умолчанию случайный пароль - хорошая идея, если env var не установлен:

config.middleware.use(Rack::Auth::Basic) do |u, p|
  [u, p] == [ENV['USER'], ENV['PASSWORD'] || SecureRandom.hex]
end
1 голос
/ 22 декабря 2015

Другой способ сделать это с помощью application_controller.rb:

  # app/controllers/application_controller.rb
  before_filter :http_basic_auth

  def http_basic_auth
    if ENV['HTTP_AUTH'] =~ %r{(.+)\:(.+)}
      unless authenticate_with_http_basic { |user, password|  user == $1 && password == $2 }
        request_http_basic_authentication
      end
    end
  end

и затем вам нужно экспортировать ваши значения: для разработки:

 export HTTP_AUTH=test:test

За герою:

 heroku config:set HTTP_AUTH=test:test

Теперь, когда появится окно, вы должны ввести имя пользователя / пароль => test / test.

Надеюсь, вы найдете это полезным.

...