Rails form_authenticity_token不返回任何会话[:_ csrf_token]返回实际令牌

时间:2013-08-01 14:03:26

标签: ruby-on-rails ruby ruby-on-rails-3.2

长话短说,我手动使用这个,因为我必须在纯HTML中创建表单。

我使用部分(以haml为单位)

%input{name: "authenticity_token", type: "hidden", value: form_authenticity_token}

这会输出一个空白输入框:

<input name='authenticity_token' type='hidden'>

但这可以正常运作:

%input{name: "authenticity_token", type: "hidden", value: session[:_csrf_token]}

奇怪的是,我从docs

得到了这个

有没有人知道发生了什么事?

1 个答案:

答案 0 :(得分:4)

我认为您引用的文档暗示此方法form_authenticity_token()只能在控制器中访问(类: ActionController :: RequestForgeryProtection)。

您应该直接使用session[:_csrf_token]或者您可以设置共享变量:

# in controller
def my_action
  @auth_token_form = form_authenticity_token
end

# in view
%input{name: "authenticity_token", type: "hidden", value: @auth_token_form}