轨,保护身份验证,比如以你的保护
-
12-09-2019 - |
题
我使用的其他保护身份验证和跟一个轨道应用程序(从iPhone程序,但这不应是相关的).然而,我遇到了一些问题与轨'比如以你的保护(通过 protects_from_forgery
).
我明白,比如以你的保护只有在踢为经常的形式提交(即Content-Type=application/x-www-form-urlencoded),所以我会好的,如果我提交JSON或XML数据。不幸的是,保护身份验证是目前仅限于application/x-www-form-urlencoded请求。还有一个 草案规格延伸的保护身份验证的非form-urlencoded数据, 但这并不能帮助我现在。
在我看来,我有如下选择:
发送的数据允许,知道它将不受保护身份验证签名的,并因而受到男人的攻击。显然不是一个有吸引力的解决方案。
创建特殊轨道的行动(例如
UsersController#update_oauth
),国内的代表定期的行动(例如UsersController#update
).然后,排除这些伪造的保护(protects_from_forgery :only => [:update]
).这应工作和可能临界可接受的一个或两个行动,但显然将是一个非常混乱的解决方案。复盖轨比如以你的保护要忽略保护身份验证的请求。我还没有尝试过这一点,但这似乎是应该能够改变一个钩(也许是
verify_authenticity_token
过滤器)考虑保护身份验证要求的成功。
有人碰到这之前呢?任何建议?或者我也许是缺少一些基本的东西?
解决方案
我会回答我自己的问题。:)
我加入以下方法向我们保护身份验证控制器的扩展。唯一这个加上默认的实现是的 oauth?
检查。这似乎可以做到和感觉就像一个漂亮整洁的解决方案。
def verify_authenticity_token
verified_request? || oauth? || raise(ActionController::InvalidAuthenticityToken)
end