高木のブログ

【Sinatra】GraphQL 用の最低限の CORS の設定

2022/08/13

Sinatra アプリに生やした GraphQL のエンドポイントに、フロント(React)からアクセスできるように CORS の設定をした

CORS 用の Gem を使わないやり方で、1番シンプルな書き方になってると思う

 require 'sinatra/base'
 
 class App < Sinatra::Application
+  before do
+    response.headers['Access-Control-Allow-Origin'] = '*'
+    response.headers['Access-Control-Allow-Methods'] = 'POST'
+    response.headers['Access-Control-Allow-Headers'] = 'Content-Type'
+
+    halt(200) if request.request_method == 'OPTIONS'
+  end
 
   post '/graphql' do
     result = AppSchema.execute(
       params[:query],
       variables: params[:variables],
       context: { current_user: nil }
     )
     json result
   end
 
   use Rack::JSONBodyParser
 end

response.headers['Access-Control-Allow-Origin'] は厳密にやるならちゃんと指定した方がいいと思う

halt(200) if request.request_method == 'OPTIONS' が重要だった

プリフライト・リクエストを覚えた

参考


ytkg

Written by ytkg, Twitter, GitHub