我有一个使用 phonegap 2.3.0 for Windows Phone 8 SDK 通过 iframe 加载的 webapp。通过 iframe 加载它的问题是,Can't verify CSRF token authencity
当我发送$.post()
请求时,它会在 Rails 端引起。
我尝试了几种方法,例如用令牌覆盖$.post()
要使用的$.ajax()
to setHeaderRequest
,以及$.ajaxSetup()
当我禁用protect_from_forgery
orverify_authenticity_token
时,应用程序正确加载。
我相信这个问题是因为 webapp 位于另一个域中(跨域问题),而 csrf 只是试图防止点击劫持。有没有办法绕过这个问题?
这是我如何发布的示例:
$.post(url, {app: {played: tiles}, no: no}, function (response) {
linkTo('#app_button', response['next']);
});
例子:
$.ajaxSetup({
beforeSend: function(xhr) {
xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').prop('content'));
}
});
编辑:我已经能够将真实性令牌作为参数传递到我的发布请求中,但出现相同的错误。我开始相信错误不是由令牌引起的。发生错误的其他原因是什么?
日志:
[2539 - 2013/03/06 15:37:42] (INFO) Parameters: {"app"=>{"played"=>"tiles"}, "no"=>"no", "authenticity_token"=>"yBpUImzjtKGIejh/WCekv/GCi1zjPirib22plqfLJ1Y="}
[2539 - 2013/03/06 15:37:42] (WARN) WARNING: Can't verify CSRF token authenticity
[2539 - 2013/03/06 15:37:42] (INFO) User agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920)
[2539 - 2013/03/06 15:37:42] (DEBUG) User Load (1.8ms) SELECT `users`.* FROM `users` WHERE `users`.`id` IS NULL LIMIT 1
[2539 - 2013/03/06 15:37:42] (DEBUG) CACHE (0.0ms) SELECT `users`.* FROM `users` WHERE `users`.`id` IS NULL LIMIT 1
[2539 - 2013/03/06 15:37:42] (DEBUG) CACHE (0.0ms) SELECT `users`.* FROM `users` WHERE `users`.`id` IS NULL LIMIT 1
[2539 - 2013/03/06 15:37:42] (WARN) Lost session [118.143.97.82] (/locations/1/games) - Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920)
[2539 - 2013/03/06 15:37:42] (DEBUG) CACHE (0.0ms) SELECT `users`.* FROM `users` WHERE `users`.`id` IS NULL LIMIT 1