jquery – protect_from_forgery&不引人注意的Javascript

前端之家收集整理的这篇文章主要介绍了jquery – protect_from_forgery&不引人注意的Javascript前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一些 javascript在我的Rails网站做一个ajax调用
$.ajax({type: "PUT",url: url,data: { dummy: data },complete: function(data) {}});

当Rails得到它时,它会抛出一个ActionController :: InvalidAuthenticityToken错误.如果可能,我想保留在…的… … … …但是,如何从JavaScript文件传递auth令牌?

谁能帮我吗?

解决方法

在您的布局中,在任何其他JS运行之前添加它们:
<script>
  function authToken() {
    return '<%= form_authenticity_token if protect_against_forgery? -%>';
  }
</script>

authToken被编码为一个函数,因此您不太可能会用其他JavaScript意外覆盖它.

或者,从Rails 3起,认证令牌被嵌入为< Meta>标签,您可以阅读:

<script>
  function authToken() {
    return $('Meta[name="csrf-token"]').attr('content');
  }
</script>

在您的主JS中,您可以调用authToken(),并将返回您的真实性令牌作为字符串以包含在您的Ajax调用中.例如,使用jQuery:

$.ajax({
  type: 'PUT',url:  url,data: {
    foo: bar,authenticity_token: authToken()
  },complete: function(data) {}
});

请注意,如果您使用Rails的内置form_for帮助器,它将自动将隐私输入中添加真实性令牌.如果您要发送所有表单的数据,包括隐藏的auth令牌,您可以简单地使用:

var $form = $('form');
$.ajax({
  url:      $form.attr('action'),type:     $form.attr('method'),// "get" or "post"; overridden by Rails' hidden "_method"
              // input value,e.g.,"put"
  data:     $form.serialize(),// Includes hidden "authenticity_token" and "_method" inputs
  complete: function(data) {}
});

当您已经编写了没有JS的表单时,这种模式通常很有用,而且您正在添加一个不引人注目的JS层,只需通过Ajax发送表单的数据.

原文链接:https://www.f2er.com/jquery/179900.html

猜你在找的jQuery相关文章