有没有办法为heroku上的应用程序设置简单的http身份validation?
我想使用简单的http身份validation在heroku上设置一个私有临时服务器。 那可能吗?
绝对。 最简单的解决方案是在应用程序控制器中放置一些使用Rails内置的基本身份validation支持的东西(参见http://railscasts.com/episodes/82-http-basic-authentication )并将其包装在有条件的你的Rails.env
。 请注意,在Heroku上,默认情况下RAILS_ENV设置为production,但您可以使用heroku config
( http://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密码规范:
在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
- 在Heroku上安装rmagick gem的问题
- Rails 4自定义404导致Heroku上的postgresql连接失败
- 使用rake任务重置数据库
- 使用Rails应用程序桥接一个简单的Node.js和Socket.io聊天应用程序(在Heroku上)
- 如何在heroku上运行phantomjs?
- 在Heroku上托管的ROR中,在2个站点上显示一个具有不同前端但相同后端的应用程序
- Rails 4 – 如何在开发中使用sqlite3和使用Heroku生成PostgreSQL
- Heroku推送错误:rake资产上的“NameError:未初始化的常量Uglifier :: VERSION”:预编译
- Heroku捆绑器不删除旧gem版本