密码保护rails登台环境

时间:2009-09-26 21:46:10

标签: ruby-on-rails authentication staging

我正在尝试找出保护我的临时环境的最佳方法。目前我正在同一台服务器上运行暂存和生产。

我能想到的两个选择是:

使用rails digest身份验证

我可以把这样的东西放在application_controller.rb

# Password protection for staging environment
if RAILS_ENV == 'staging'
  before_filter :authenticate_for_staging
end

def authenticate_for_staging
  success = authenticate_or_request_with_http_digest("Staging") do |username|
    if username == "staging"
      "staging_password"
    end
  end
  unless success
    request_http_digest_authentication("Admin", "Authentication failed")
  end
end

这是从Ryan Daigle's blog撕掉的。我正在运行最新的Rails 2.3,所以我应该摆脱他们对此的安全问题。

使用网络服务器身份验证

我也可以使用.htaccess或apache权限实现这一点,但是它使我的服务器配置稍微复杂一些(我使用Chef,并且需要不同的apache配置用于登台/制作)。


现在我有第一个实施和工作,你看到它的问题吗?我错过了一些明显的事吗?提前谢谢!

3 个答案:

答案 0 :(得分:25)

在解决类似但更清洁的解决方案之前,

碰到这个以帮助其他人,就像我自己一样。

# 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

我写了一篇关于它的简短blog post

答案 1 :(得分:8)

如果您使用多阶段环境进行部署,并且拥有生产环境和暂存环境,则只需将这些行添加到 config / environments / staging.rb

MyApp::Application.configure do
  # RESTRICTING ACCESS TO THE STAGE ENVIRONMENT
  config.middleware.insert_before(::Rack::Runtime, "::Rack::Auth::Basic", "Staging") do |u, p|
    u == 'tester' && p == 'secret'
  end

  ...

end

通过这样做,您不需要配置Apache。

我正在使用Ruby 2和Rails 4,它就像一个魅力!

答案 2 :(得分:1)

我会使用http基本身份验证,我发现它没有固有的问题。