我正在开发一个通过API为移动应用程序提供服务的Rails 4应用程序,并且有一个用于管理员管理应用程序的Web UI.还有一些用户可以看到的网页(成功的电子邮件确认和重置密码).
我创建了两组控制器:一组继承自APIController,另一组继承自AdminController.这两个都继承自ApplicationController.负责面向用户的网页的其余控制器也继承自ApplicationController.
鉴于此方案,我不确定如何使用protect_from_forgery正确实施CSRF保护.我目前有以下内容:
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
所以我的问题是:这是正确的吗?有没有办法改善它?APIController中的检查是否毫无意义,因为所有API请求都只是JSON吗?
Brakeman抱怨说ApplicationController中没有protect_from_forgery调用,但也许它看不到子类中的调用.
提前致谢!