【问题标题】:Can we put regex string in enviroment variable?我们可以将正则表达式字符串放在环境变量中吗?
【发布时间】:2021-10-20 05:38:47
【问题描述】:

我在 rails 中有代码可以像这样从 env 中的域列表中检查 CORS

config.middleware.insert_before 0, Rack::Cors do
  domains = ""

  if ENV["DOMAIN_CORS"].present? && !ENV["DOMAIN_CORS"].empty?
    domains = ENV["DOMAIN_CORS"].split(",").map { |origin| origin.strip }
  end

  allow do
    origins domains
    resource "*", headers: :any, methods: [:get, :post, :put, :delete, :options], credentials: true
  end
end

我有这样的环境 DOMAIN_CORS = "https://example1.com, https://example2.com"

上面的代码可以很好地检查这两个域的 cors,但是如果我想允许 example.com 的所有子域工作,请在阅读此处的一些帖子后

https://github.com/cyu/rack-cors/issues/30

我需要像这样进行正则表达式检查

(.*?)\.example\.com

我将环境设置为

DOMAIN_CORS = "https://example1.com, https://example2.com, (.*?)\.example\.com, /(.*?)\.example\.com/" 

但是所有方法似乎都行不通,所以无论如何我可以在这种情况下将正则表达式字符串放入 env 中吗? .提示

【问题讨论】:

    标签: ruby-on-rails regex ruby environment-variables ruby-on-rails-5


    【解决方案1】:

    如您所见,他们在链接的 rack-cors 问题中使用的是 Regexp 类,而不是您的情况下的 String

    我建议连接 2 个环境变量:

    • STRING_DOMAIN_CORS="https://example1.com, https://example2.com"
    • REGEXP_DOMAIN_CORS="(.*?).example.com"

    并相应地映射它们:

    ENV['STRING_DOMAIN_CORS'].split(",").map { |origin| origin.strip } +
    ENV['REGEXP_DOMAIN_CORS'].split(",").map { |origin| origin.strip }.map { |origin| Regexp.new(origin) }
    

    【讨论】:

      【解决方案2】:

      在您的环境变量字符串中,将正则表达式括在// 之间,以便我们可以相应地检索和解析它:

      DOMAINS_CORS = "https://example1.com, https://example2.com, /(.*?)\\.example\\.com/"
      domains = DOMAIN_CORS.split(",").map(&:strip).map{ |x| x.start_with?("/") ? Regexp.new(x[1..-2]) : x }
       => ["https://example1.com", "https://example2.com", /(.*?)\.example\.com/]
       #=>  ^ string                ^ string                ^ regexp
      

      上面解析并返回字符串数组和正则表达式对象,这些对象可以传递给origins,如下所示

        allow do
          origins domains
          resource "*", headers: :any, methods: [:get, :post, :put, :delete, :options], credentials: true
        end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-15
        • 1970-01-01
        • 2021-12-14
        • 1970-01-01
        • 2015-05-16
        相关资源
        最近更新 更多