ruby-on-rails - POST 到 Rails API 时,真实性 token 无效

标签 ruby-on-rails

我有一个 Web 应用程序,它通过 Rails API 获取和存储一些数据。

当我尝试“发布”到 Rails API 时,收到错误 ActionController::InvalidAuthenticityToken。我知道一种选择是简单地禁用我的 Rails Controller 上的真实性 token 要求。

我的 Web 应用程序在调用 Rails API 时是否可以提供正确的真实性 token ?我怎样才能做到这一点?

最佳答案

这里为您提供 2 部分答案。

首先,如果您打算使用 Rails 作为 API,我建议您使用另一种方法来验证发出请求的用户实际上是他们所说的用户,例如在创建帐户或登录时创建一个唯一的 token 可以在初始响应中返回,并在后续请求中作为 HTTP header 提供。如果您担心其安全性,您可以选择对 key 加上一些其他值进行 Base64 编码,并在比较之前在服务器端对其进行解码。

如果您仍然希望使用 Rails 中内置的 CSRF 方法,只要用户使用 AJAX 或其他方式从 Web 应用程序发出请求,就可以这样做。如果您的布局文件 header 中有 csrf_meta_tags ERB,您可以获取该值并将其设置在 X-CSRF-Token HTTP header 中。使用 jQuery,它可能看起来像这样:

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

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

关于ruby-on-rails - POST 到 Rails API 时,真实性 token 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33986608/

相关文章:

ruby-on-rails - 正则表达式 - 元素的成本

ruby-on-rails - rails : Is there a built translation for "ago"?

ruby-on-rails - 使用RSpec测试密码长度验证

ruby-on-rails - 如何在 save() 期间捕获 ActiveRecord::RecordNotFound 异常?

ruby-on-rails - 如何从服务器目录制作 Paperclip 进程文件?

ruby-on-rails - MySql Query::当查询被触发时,如何解决数据中的 's 问题

ruby-on-rails - ruby 和 gem rdiscount windows 8 64 位的安装问题

ruby-on-rails - Rails 3 "_method=PUT"仍然可以工作吗?

jquery - Rails3 中使用 jquery 的动态表单字段

ruby-on-rails - 在 Ubuntu 上安装 rails 的位置