¿Por qué no está el rack-cors filtrando solicitudes entrantes, según Rspec?
Me gustaría mi aplicación Rails 5 solo para API, por ahora ejecutándose enhttp://localhost:3000
, para aceptar solo solicitudes de mi aplicación front-end NodeJS, por ahora ejecutándose enhttp://localhost:8888
.
Entonces configuré/config/initializers/cors.rb
Me gusta esto:
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins "http://localhost:8888"
resource "*",
headers: :any,
methods: [:get, :post, :put, :patch, :delete, :options, :head]
end
end
Y escribí esta prueba:
#/spec/request/cors_request_spec.rb
RSpec.feature "CORS protection", type: :request do
it "should accept a request from a whitelisted domain" do
get "/api/v1/bodies.json", nil, "HTTP_ORIGIN": "http://localhost:8888"
expect(response.status).to eql(200)
end
it "should reject a request from a non-whitelisted domain" do
get "/api/v1/bodies.json", nil, "HTTP_ORIGIN": "https://foreign.domain"
expect(response.status).to eql(406)
end
end
La primera prueba está pasando como se esperaba. Pero el segundo falla con un código de respuesta de 200. ¿Por qué?
(Por cierto, no estoy casado con un código de respuesta 406; solo uno que indique que la solicitud no se cumplirá).