ruby-on-rails - 暂存环境 : Password protect everything except for webhook

标签 ruby-on-rails ruby heroku middleware staging

为了暂存,我想用密码保护所有内容,所以我在下面添加了代码。但是,我该如何编辑它以使其跳过 webhook Controller ,这样我仍然可以在暂存时测试入站电子邮件?

  config.middleware.insert_after(::Rack::Lock, "::Rack::Auth::Basic", "Staging") do |u, p|
    [u, p] == [ENV["STAGING_USERNAME"], ENV["STAGING_PASSWORD"]]
  end

最佳答案

我不认为你可以用 `Rack::Auth::Basic' 做到这一点。然而,看着 source ,看来您可以创建自己的简单例份验证机制,该机制需要一个额外的选项。

它与 Rack::Auth::Basic 相同,除了 call 方法。使用以下内容在 app/middleware 中创建一个名为 authenticate_excluding.rb 的文件:

class AuthenticateExcluding < ::Rack::Auth::Basic

  def initialize(app, options={}, &authenticator)
    @excluded_paths = options[:exclude]
    super(app, options[:realm], &authenticator)
  end

  def call(env)
    if @excluded_paths && @excluded_paths.include?(env['PATH_INFO'])
      return @app.call(env)
    end
    super
  end
end

您现在可以将它用于:

config.middleware.insert_after(::Rack::Lock, "AuthenticateExcluding", excluding: ["/webhooks/service", "/other_hook"]) do |u, p|
  [u, p] == [ENV["STAGING_USERNAME"], ENV["STAGING_PASSWORD"]]
end

那应该行得通。如果您还想启用领域(之前的“Staging”参数),您还可以将 realm: "Staging" 添加到选项散列中。

关于ruby-on-rails - 暂存环境 : Password protect everything except for webhook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22336048/

相关文章:

ruby-on-rails - RSpec 错误 "undefined method ` respond_with'..."

ruby-on-rails - Heroku 上的 ActiveAdmin 预编译错误

ruby-on-rails - ActiveRecord`includes'不将数据缓存在生产环境中

git - 致命的 : failed to read object <objectid> Interrupted system call

ruby-on-rails - ActiveRecord 使用连接来提高性能,但将所有关联的记录加载到内存中,就像包含一样

ruby-on-rails - 如何检查 Rails 更新操作中属性是否发生变化?

ruby-on-rails - rake 中止! rails 上的 ruby

ruby-on-rails - 如何在我的 NetBeans 6.9.1 中安装调试器

ruby-on-rails - 如何在不重启 Rails 服务器的情况下重新加载 secrets.yml?

ruby - 使用 Jekyll 插件在 _site 内生成文件