POST到Rails API时无效的真实性令牌

时间:2015-11-29 18:49:58

标签: ruby-on-rails

我有一个网络应用程序得到&通过Rails API存储一些数据。

当我尝试"发布"在Rails API中,我收到错误ActionController::InvalidAuthenticityToken。我知道一个选项是简单地禁用我的Rails控制器上的真实性令牌要求。

在调用Rails API时,是否可以让我的Web应用程序提供正确的真实性标记?我怎么能这样做?

1 个答案:

答案 0 :(得分:3)

2部分答案在这里。

首先,如果您要将Rails用作API,我建议您使用另一种方式验证发出请求的用户实际上是他们所说的用户,例如在创建帐户或登录时创建唯一令牌可以在初始响应中返回,并在后续请求中作为HTTP标头提供。如果你担心这个问题的安全性,你可以选择base64编码密钥和其他一些值,并在比较之前对服务器端进行解码。

如果您仍希望使用烘焙到Rails的CSRF方法,只要用户使用AJAX或其他任何方式从webapp发出请求,您就可以这样做。如果布局文件的标题中有csrf_meta_tags ERB,则可以获取该值并将其设置在X-CSRF-Token HTTP标头中。使用jQuery可能看起来像:

$.ajaxPrefilter(function(options, originalOptions, xhr) {
  var token = $('meta[name="csrf-token"]').attr('content');
  if (token) xhr.setRequestHeader('X-CSRF-Token', token);  
});

这会导致它被添加到使用jQuery创建的每个ajax请求中。