我想使用简单的http身份验证在heroku上设置私有临时服务器。这可能吗?
答案 0 :(得分:52)
更简洁的方法是将几行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密码规范:
答案 1 :(得分:14)
在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
答案 2 :(得分:7)
绝对。最简单的解决方案是在应用程序控制器中添加一些内容,使用Rails内置的基本身份验证支持(请参阅此处:http://railscasts.com/episodes/82-http-basic-authentication),然后将其包装在Rails.env
的条件中。请注意,在Heroku上,默认情况下RAILS_ENV设置为production,但您可以使用heroku config
(http://docs.heroku.com/config-vars)为非生产应用更改此设置。
你也可以考虑安装一些路障式的Rack中间件,但我会选择上面的。
答案 3 :(得分:2)
有一个很好的heroku附加组件,它使用Mozilla Persona进行身份验证。对于小批量站点(每月10,000次以下的身份验证),它是免费的:
https://addons.heroku.com/wwwhisper
非常易于安装和配置。
答案 4 :(得分:1)
使用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 =>测试/检验。
希望你发现它很有用。
答案 5 :(得分:1)
Rails 5的更新答案。在您的config/application.rb
或选定的环境配置中:
config.middleware.use(Rack::Auth::Basic) do |u, p|
[u, p] == ["user", "password"]
end
此外,Ole's blog post中已指出要使用ENV变量。我补充说,如果未设置env var,则默认使用随机密码是个好主意:
config.middleware.use(Rack::Auth::Basic) do |u, p|
[u, p] == [ENV['USER'], ENV['PASSWORD'] || SecureRandom.hex]
end