我使用的其他保护身份验证和跟一个轨道应用程序(从iPhone程序,但这不应是相关的).然而,我遇到了一些问题与轨'比如以你的保护(通过 protects_from_forgery).

我明白,比如以你的保护只有在踢为经常的形式提交(即Content-Type=application/x-www-form-urlencoded),所以我会好的,如果我提交JSON或XML数据。不幸的是,保护身份验证是目前仅限于application/x-www-form-urlencoded请求。还有一个 草案规格延伸的保护身份验证的非form-urlencoded数据, 但这并不能帮助我现在。

在我看来,我有如下选择:

  1. 发送的数据允许,知道它将不受保护身份验证签名的,并因而受到男人的攻击。显然不是一个有吸引力的解决方案。

  2. 创建特殊轨道的行动(例如 UsersController#update_oauth),国内的代表定期的行动(例如 UsersController#update).然后,排除这些伪造的保护(protects_from_forgery :only => [:update]).这应工作和可能临界可接受的一个或两个行动,但显然将是一个非常混乱的解决方案。

  3. 复盖轨比如以你的保护要忽略保护身份验证的请求。我还没有尝试过这一点,但这似乎是应该能够改变一个钩(也许是 verify_authenticity_token 过滤器)考虑保护身份验证要求的成功。

有人碰到这之前呢?任何建议?或者我也许是缺少一些基本的东西?

有帮助吗?

解决方案

我会回答我自己的问题。:)

我加入以下方法向我们保护身份验证控制器的扩展。唯一这个加上默认的实现是的 oauth? 检查。这似乎可以做到和感觉就像一个漂亮整洁的解决方案。

def verify_authenticity_token
  verified_request? || oauth? || raise(ActionController::InvalidAuthenticityToken)      
end
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top