【发布时间】:2014-07-03 14:15:12
【问题描述】:
我想使用两种不同的protect_from_forgery 策略构建一个rails 应用程序:一种用于Web 应用程序,一种用于API。
在我的应用程序控制器中,我有这行代码:protect_from_forgery with: :exception 为了防止 CSRF 攻击,它工作得很好。
在我的 API 命名空间中,我创建了一个继承自我的应用程序控制器的 api_controller,它是 API 命名空间中所有其他控制器的父类,我将上面的代码更改为:protect_from_forgery with: :null_session。
很遗憾,我在尝试发出 POST 请求时出错:“无法验证 CSRF 令牌的真实性”。
我不想在我的 API 控制器中跳过 verify_authenticity_token 方法,我只想在我的应用程序中有两个不同的策略,那么如何覆盖我的应用程序控制器中定义的protect_from_forgery 策略?
编辑:好的,所以我最终做了我一开始不想做的事情:更改我的 api_controller 的继承:它现在从 ActionController::Base 继承,而不是从我的应用程序控制器。它现在可以工作了,但是:
- 它没有回答我的问题,即覆盖protect_from_forgery 策略。
- 它不是 DRY,因为我必须复制/粘贴以前在 application_controller 中的内容。
因此,如果有人有真正的方法来覆盖此方法,我将不胜感激。
【问题讨论】:
标签: ruby-on-rails ruby overriding csrf