ruby-on-rails - Rails form_authenticity_token 不返回任何 session [:_csrf_token] returns the actual token

标签 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 得到了这个

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

最佳答案

我认为您引用的文档暗示此方法 form_authenticity_token() 只能在 Controller (类: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}

关于ruby-on-rails - Rails form_authenticity_token 不返回任何 session [:_csrf_token] returns the actual token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17996270/

相关文章:

ruby - 如何返回调用方法的字符串名称?

tomcat - 错误页面(500.html、404.html 等)未在 rails/jruby 环境中呈现

ruby-on-rails - 检查 Nokogiri HTML 文档是否可用

ruby-on-rails - 设计+主动管理员重定向

mysql - 在 Rails 3 中同时使用 postgresql 和 mysql?

ruby-on-rails - rails 数据库 :seed "rake aborted! ArgumentError: wrong number of arguments (2 for 0..1)"

ruby - 使配置可通过整个 ruby​​ gem

ruby-on-rails - Assets 管道未导入 ERB

heroku - 邪恶的PDF +fonts+heroku+rails3.2

ruby-on-rails - ruby/rails 根据字符串数组对记录数组进行排序