POST 已使用真实性令牌完成请求,但仍会出现异常
POST request done with Authenticity Token, but exception still rased
我的控制器正在响应一个 js GET 请求,在我的 js.erb
文件中,我正在报告用户浏览器的 Fingerprint2
生成的浏览器数据。这是通过 POST 请求完成的,因为数据字符串很大,所以我插入了一个 beforeSend
方法来添加真实性令牌。
然而,这被ActionController::InvalidAuthenticityToken - ActionController::InvalidAuthenticityToken
拒绝了。当我检查时,header 看起来像在成功的 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) {});
});
我找到了问题的根源。几天前,我将我的 config/session_store.rb
更改为:
MyApp::Application.config.session_store :cookie_store, key: '_my-app_session'
至:
MyApp::Application.config.session_store :disabled
当我改回这个问题时,问题就消失了。
我的控制器正在响应一个 js GET 请求,在我的 js.erb
文件中,我正在报告用户浏览器的 Fingerprint2
生成的浏览器数据。这是通过 POST 请求完成的,因为数据字符串很大,所以我插入了一个 beforeSend
方法来添加真实性令牌。
然而,这被ActionController::InvalidAuthenticityToken - ActionController::InvalidAuthenticityToken
拒绝了。当我检查时,header 看起来像在成功的 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) {});
});
我找到了问题的根源。几天前,我将我的 config/session_store.rb
更改为:
MyApp::Application.config.session_store :cookie_store, key: '_my-app_session'
至:
MyApp::Application.config.session_store :disabled
当我改回这个问题时,问题就消失了。