我正在尝试构建一个React - Rails API项目。我添加了gem 'rack-cors'
并创建了config/initializers/cors.rb
文件:
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins "http://localhost:3001"
# The React part will be on port 3001 so thats way we add it
# Change it to the production url when going on production
resource "*",
headers: :any,
methods: [:get, :post, :put, :patch, :delete, :options, :head]
end
end
我只想允许端口3001
,因为这是我的React前端将服务的端口。现在我想测试这是否真的工作和阻止其他请求。
到目前为止,我一直在使用Postman
来测试API(必须下载它才能与http
一起工作)。我认为因为我只将过滤器添加到特定端口,所以它会阻止来自Postman
的请求,但它仍然显示API调用中请求的数据。
另外,如果我尝试在浏览器上这样访问它:
http://localhost:3000/api/v1/users
它仍在提供数据,这些数据应被阻止到除3001
之外的每个端口。
为什么会发生这种情况?有没有其他方法来仔细检查它是否工作?谢谢!
注意:我关闭了服务器并再次重新启动它,它的行为仍然相同
3条答案
按热度按时间voase2hg1#
为了在本地测试CORS,我找到了以下存储库:https://github.com/njgibbon/nicks-cors-test
只需克隆它,然后单击
html
文件,这样它就可以在浏览器中打开。默认情况下,它调用github API
(https://api.github.com)并从那里获取信息。您可以打开控制台并检查它。如果您将其更改为https://google.com
,它将抛出CORS限制。类似地,您可以将其更改为
http://localhost:3000/api/v1/users
(在我的情况下),它将使用我现在的配置抛出CORS错误。要再次检查,只需转到
cors.rb
并输入origins "*"
。重新启动应用服务器并尝试再次运行html文件。现在我们不会被阻止。insrf1ej2#
做一个API调用从浏览器(不是从URL和 Postman )。可能是通过 AJAX 测试。
w8biq8rn3#
我通过添加
宝石'rack-cors',要求:“rack/cors”在添加所需位后工作