有没有办法为heroku上的应用程序设置简单的http身份validation?

我想使用简单的http身份validation在heroku上设置一个私有临时服务器。 那可能吗?

绝对。 最简单的解决方案是在应用程序控制器中放置一些使用Rails内置的基本身份validation支持的东西(参见http://railscasts.com/episodes/82-http-basic-authentication )并将其包装在有条件的你的Rails.env 。 请注意,在Heroku上,默认情况下RAILS_ENV设置为production,但您可以使用heroku confighttp://docs.heroku.com/config-vars )为非生产应用程序更改此设置。

你也可以考虑安装一些路障式的Rack中间件,但我会选择上面的内容。

更简洁的方法是将几行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 

此提示由Ole Morten Amundsen提供。 更多信息加Heroku密码规范:

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

在Rails4上,我得到“没有这样的中间件插入后:Rack :: Lock”错误。 将Adam的代码替换为以下代码:

 # 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

有一个很好的heroku附加组件,它使用Mozilla Persona进行身份validation。 对于低容量站点(每月10,000次以下的身份validation),它是免费的:

https://addons.heroku.com/wwwhisper

非常容易安装和配置。

使用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:

  heroku config:set HTTP_AUTH=test:test 

现在当窗口提示你应该输入user / password => test / test。

希望你发现它很有用。

更新了Rails 5的答案:

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

此外,在Ole的博客文章中已经指出使用ENV vars。 我补充一点,如果没有设置env var,默认为随机密码是个好主意:

 config.middleware.use(Rack::Auth::Basic) do |u, p| [u, p] == [ENV['USER'], ENV['PASSWORD'] || SecureRandom.hex] end