Rails6でapiを書くときのcorsの設定での躓きについて
この記事で書くこと
以下のようなアプリケーションを作ろうとしたときに、CORSの設定で本番反映後にエラーが発生してしまったので、同じミスをしないように情報をきちんとまとめておく。
結論
firebaseでホスティングされたnuxtアプリケーションのurlが、 https://xxxx.web.app
だった場合、
Rails.application.configure do
# 中略
config.hosts << 'xxxx.web.app'
end
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
if Rails.env.production?
origins 'https://xxxx.web.app'
else
origins 'http://localhost:3000'
end
resource '*',
headers: :any,
methods: [:get, :post, :put, :patch, :delete, :options, :head]
end
end
何が起きたか
Access to XMLHttpRequest at 'API側のurl' from origin 'アプリ側のurl' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
apiへリクエストがエラーになってしまう。
うまく行ってなかったときの状況
Ruby: 2.7.1
Rails: 6.0.3.3
rack-cors: 1.1.1
rack-corsの設定
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
if Rails.env.production?
origins 'https://xxxx.web.app/'
else
origins 'http://localhost:3000'
end
resource '*',
headers: :any,
methods: [:get, :post, :put, :patch, :delete, :options, :head]
end
end
config/environments/production.rb
Rails.application.configure do
# 中略
config.hosts << 'https://xxxx.web.app'
end
なぜ???間違ってないはず。。。
となったが、firebaseの
Hosting URL: https://xxxx.web.app
という記述を見直していると最後の /
がないのでは!????と気づく。
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
if Rails.env.production?
origins 'https://xxxx.web.app' # 最後の/を削除する
else
origins 'http://localhost:3000'
end
resource '*',
headers: :any,
methods: [:get, :post, :put, :patch, :delete, :options, :head]
end
end
Access to XMLHttpRequest at 'API側のurl' from origin 'アプリ側のurl' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
そうすると、corsのエラーがなくなった。
戦いはまだ終わってなかった。
次は、apiがstatus403で返ってきた。
config.hosts << 'xxxx.web.app'
「こうだよ!!」とresponseで親切に教えてくれていました。。。 ありがとう、、
Author And Source
この問題について(Rails6でapiを書くときのcorsの設定での躓きについて), 我々は、より多くの情報をここで見つけました https://qiita.com/xxl/items/06a825ae757ebbf71e39著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .