📜  rails cors allow all (1)

📅  最后修改于: 2023-12-03 14:46:54.006000             🧑  作者: Mango

Rails CORS:允许所有资源访问

介绍

跨域资源共享(CORS)是一种机制,允许网页从不同的域访问另一个域中的资源。默认情况下,浏览器会阻止跨域请求,CORS机制可以让服务器告诉浏览器哪些跨域请求是可以接受的。

Ruby on Rails框架提供了一个简单的gem包,用于设置CORS规则,它是CORS协议的一个中间件。

安装

在Gemfile中添加:

gem 'rack-cors'

然后执行:

bundle install
配置

1. 所有域名都可以访问

### application.rb
config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins '*'
    resource '*', headers: :any, methods: [:get, :post, :put, :delete, :options]
  end
end

这个配置允许所有域名的请求,通过插入Rack::Cors中间件来实现。

- allow: 用于配置访问权限规则
- origins: 可以是一个字符串或者一个正则表达式,表示来自哪些域名的请求是允许的。
- resource: 资源规则,指定了哪些路由、请求方法、请求头可以被跨域访问。
  - headers: 允许跨域请求时,对于浏览器的跨域请求,服务器端需要返回的headers。
  - methods: 声明服务端支持的HTTP方法。

2. 指定域名访问

### application.rb
config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins 'example.com', 'www.example.com'
    resource '*', headers: :any, methods: [:get, :post, :put, :delete, :options]
  end
end

这个配置允许example.comwww.example.com两个域名的请求。

3. 携带cookie

默认情况下,浏览器不会把cookie发给跨域的服务器,如果需要携带cookie,需要将with_credentials参数设置为true。

### application.rb
config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins '*'
    resource '*', headers: :any, methods: [:get, :post, :put, :delete, :options],
      credentials: true
  end
end

4. 使用Rails的配置文件

将上面的配置加入Rails的配置文件。

### config/environments/production.rb
Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins '*'
    resource '*', headers: :any, methods: [:get, :post, :put, :delete, :options]
  end
end
结论

以上是使用Rails CORS允许所有资源访问的介绍。使用Rack::Cors中间件是一个简单而又方便的方法,让我们可以授权对我们的API进行跨域访问。具体的配置可以根据实际需求进行调整。