1

我的控制器正在响应一个 js GET 请求,并且在我的js.erb文件中我报告Fingerprint2了用户浏览器生成的浏览器数据。这是通过 POST 请求完成的,因为数据字符串很大,所以我插入了一个beforeSend添加 Authenticity Token 的方法。

但是,这被拒绝了ActionController::InvalidAuthenticityToken - ActionController::InvalidAuthenticityToken。当我检查时,标头看起来就像在成功的 GET 请求中一样:

X-CSRF-Token:hl/TgkY7k0yBG03KX9IBrsDhk2K4tUUh8JTooT7A0yYZ0l53p8lTt0F3dZvRwyS3bIkbbkuTdElP2KisozjXjw==

js 代码如下所示:

(new Fingerprint2).get(function(fingerprint, components) {
  return $.ajax({
    url: "/user_browser",
    type: "post",
    beforeSend: function(xhr) {
      xhr.setRequestHeader('X-CSRF-Token',
      $('meta[name="csrf-token"]').attr('content'))
    },
    data: {
      some_id: '123',
      components: JSON.stringify(components),
      fingerprint: fingerprint
    },
    dataType: "json"
  }).success(function(data) {});
});
4

1 回答 1

0

我找到了问题的根源。几天前,我改变了我config/session_store.rb的:

MyApp::Application.config.session_store :cookie_store, key: '_my-app_session'

到:

MyApp::Application.config.session_store :disabled

当我把它改回来时,问题就消失了。

于 2016-06-09T13:05:52.433 回答