Rails 4真实性令牌

当我遇到一些真实性令牌问题时,我正在研究一个新的Rails 4应用程序(在Ruby 2.0.0-p0上)。

在编写响应json的控制器时(使用respond_to类方法),当我尝试使用curl创建记录时,我开始获取Action ActionController::InvalidAuthenticityToken异常的create动作。

我确定我设置了-H "Content-Type: application/json"并使用-d "<my data here>"设置数据,但仍然没有运气。

我尝试使用Rails 3.2编写相同的控制器(在Ruby 1.9.3上),并且我没有任何真实性令牌问题。 我搜索了四周,我发现Rails 4中的真实性令牌发生了一些变化。根据我的理解,它们不再自动插入到表单中了? 我想这会以某种方式影响非HTML内容类型。

有没有什么办法可以解决这个问题,而无需请求一个HTML表单,抢走真实性标记,然后用该标记发出另一个请求? 还是我完全错过了一些完全明显的东西?

编辑:我刚刚尝试使用脚手架在新的Rails 4应用程序中创建新记录而不更改任何内容,而且我遇到了同样的问题,所以我想这不是我所做的。


我想我只是想出了它。 我改变了(新)默认值

protect_from_forgery with: :exception

protect_from_forgery with: :null_session

根据ApplicationController的注释。

# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.

您可以通过查看request_forgery_protecton.rb的源代码,或者更具体地看以下几行来查看它们的区别:

在Rails 3.2中:

# This is the method that defines the application behavior when a request is found to be unverified.
# By default, Rails resets the session when it finds an unverified request.
def handle_unverified_request
  reset_session
end

在Rails 4中:

def handle_unverified_request
  forgery_protection_strategy.new(self).handle_unverified_request
end

这将调用以下内容:

def handle_unverified_request
  raise ActionController::InvalidAuthenticityToken
end

不要关闭csrf保护,最好将以下代码行添加到表单中

<%= tag(:input, :type => "hidden", :name => request_forgery_protection_token.to_s, :value => form_authenticity_token) %> 

如果您使用form_for或form_tag生成表单,则它会自动在表单中添加上面的代码行


将以下行添加到表单为我工作:

<%= hidden_field_tag :authenticity_token, form_authenticity_token %>
链接地址: http://www.djcxy.com/p/14251.html

上一篇: Rails 4 Authenticity Token

下一篇: How to run a Rails application within a gem?