在Rails 3中关闭CSRF令牌


105

我有一个Rails应用,可为iPhone应用提供一些API。我希望能够简单地在资源上发布,而不必考虑获取正确的CSRF令牌。我尝试了一些我在stackoverflow中看到的方法,但似乎它们不再适用于rails 3。

感谢你们对我的帮助。

Answers:


175

在要禁用CSRF的控制器中,检查:

skip_before_action :verify_authenticity_token

或对除几种方法以外的所有功能禁用它:

skip_before_action :verify_authenticity_token, :except => [:update, :create]

或仅禁用指定的方法:

skip_before_action :verify_authenticity_token, :only => [:custom_auth, :update]

更多信息:RoR请求伪造保护


1
对于具有常规浏览器可访问形式和API端点的应用程序,这是正确的答案。如果您完全确定自己的应用程序中不会包含任何可通过浏览器访问的表单,那么Markus Proske的答案将是正确的。
阿夫曼·卡兹

这到底去哪儿了?如果某些宝石的控制器部分怎么办?
扔掉帐户

请问您能否回答这个非常相似的问题?stackoverflow.com/questions/50159847/…–

105

在Rails3中,可以为特定方法在控制器中禁用csrf令牌:

protect_from_forgery :except => :create 

12
对于任何阅读者,请注意,这就是应该输入的内容ApplicationController。Mike Lewis在(skip_before_filter :verify_authenticity_token)下的响应是如何在每个控制器的基础上禁用它,假设控制器继承自ApplicationController
NudeCanalTroll

看来这是不安全的stackoverflow.com/questions/10676018/…。你怎么看?是吗?
网站

@NudeCanalTroll您的意思是将其放在控制器中我希望它不起作用的地方?
BlackDivine

请问您能否回答这个非常相似的问题?stackoverflow.com/questions/50159847/…–

32

使用Rails 4,您现在可以选择skip_before_action而不是写入skip_before_filter

# Works in Rails 4 and 5
skip_before_action :verify_authenticity_token

要么

# Works in Rails 3 and 4 (deprecated in Rails 4 and removed in Rails 5)
skip_before_filter :verify_authenticity_token

1
有什么不同?
亚当·鲁珀

请问您能否回答这个非常相似的问题?stackoverflow.com/questions/50159847/…–

约翰·萨姆(John Sam),如果有时间,我会尽量解决。
jason328 '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.