我们可以将正则表达式字符串放在环境变量中吗?
Can we put regex string in enviroment variable?
我在 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 中吗? .谢谢
如您所见,他们在链接的 rack-cors 问题中使用的是 Regexp
class,而不是像您的情况那样的 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) }
在您的环境变量字符串中,将正则表达式括在 //
之间,以便我们可以相应地检索和解析它:
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
上面的解析和 returns 字符串和正则表达式对象数组可以传递给 origins
,如下所示
allow do
origins domains
resource "*", headers: :any, methods: [:get, :post, :put, :delete, :options], credentials: true
end
我在 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 中吗? .谢谢
如您所见,他们在链接的 rack-cors 问题中使用的是 Regexp
class,而不是像您的情况那样的 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) }
在您的环境变量字符串中,将正则表达式括在 //
之间,以便我们可以相应地检索和解析它:
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
上面的解析和 returns 字符串和正则表达式对象数组可以传递给 origins
,如下所示
allow do
origins domains
resource "*", headers: :any, methods: [:get, :post, :put, :delete, :options], credentials: true
end