私はAPIを使ってモバイルアプリを提供するRails 4アプリを開発しており、管理者がアプリケーションを管理するためのWeb UIを持っています。また、ユーザーに表示されるいくつかのWebページ(成功した電子メールの確認とリセットパスワード)もあります。RailsアプリケーションWebとAPIでprotect_from_forgeryを正しく使用する
私は2つのコントローラセットを作成しました.1つはAPIControllerから継承し、もう1つはAdminControllerから継承しました。どちらもApplicationControllerを継承しています。ユーザーが直面しているWebページを担当する残りのコントローラもApplicationControllerから継承します。
このスキームが与えられると、私はCSRF保護をprotect_from_forgeryで適切に実装する方法が不明です。私は現在次のようなことがあります:
class ApplicationController < ActionController::Base
# ...
end
module API
class APIController < ApplicationController
protect_from_forgery with: :null_session, if: Proc.new { |c| c.request.format == 'application/json' }
# ...
end
end
module Admin
class AdminController < ApplicationController
protect_from_forgery with: :exception
# ...
end
end
class UsersController < ApplicationController
protect_from_forgery with: :exception
# ...
end
私の質問は正しいですか?それを改善する方法はありますか?とにかくすべてのAPIリクエストはJSONだけなので、APIControllerのチェックは無意味ですか?
Brakemanは、ApplicationControllerにprotect_from_forgery呼び出しがないと訴えましたが、おそらくサブクラス内の呼び出しを見ないことがあります。
ありがとうございます!