RailsでサードパーティのJavaScriptを配信するときにハマったこと
髪の毛が長くて、浮浪者みたいになってきました。きたけーです。
最近、趣味でつくっているRailsのプロダクトでサードパーティのJavaScript(ブログパーツとか)を配信しようとしてハマったのでメモ。
おもむろにJSを返すアクションを書くと...
最初は試しにコントローラをつくって、その中でJSを返すようなアクションの処理を書いたのですが、エラーになりました。※
Rails4.1から、JSを返すGETリクエストに対してもCSRFのprotectionが働くのでした。
Cross-site request forgery (CSRF) protection now covers GET requests with JavaScript responses, refs: http://edgeguides.rubyonrails.org/4_1_release_notes.html
※ 結局、サードパーティーのスクリプトのためにコントローラをつくったり、asset pipelineの仕組みを使うのは不適切だと判断して、今はpublic配下に設置しています(ファイルの結合とか圧縮はgruntにやらせてます)。
同一のOriginかチェックしているアクションをスキップすることで解決
Railsのコードを読んだら、
同一のOriginかチェックするメソッドをみつけて、
これをprotect_from_forgery
メソッド内でafter_action
として追加しているのが分かったので、
対象のコントローラ、アクションに対して、アクションをスキップするようにして解決しました。
skip_after_action :verify_same_origin_request