CSRF 令牌在 Ajax 中首次提交时有效 - Codeigniter



下面是我的代码以及我如何使用Ajax提交数据。首次提交时,数据已成功发布,但是,当我重试时,它失败了,我怀疑这是来自无效的 csrf,因为可能会生成新令牌。我该如何解决这个问题?

$('#icon').on('click', '#test', function() {

var ids = $(this).data('id');
var csrfName = '<?php echo $this->security->get_csrf_token_name(); ?>',
csrfHash = '<?php echo $this->security->get_csrf_hash(); ?>';
var dataJson = { [csrfName]: csrfHash, ids: ids };
$.ajax({
url: '<?php echo base_url('client/data'); ?>',
type: 'POST',
data: dataJson,
}).done(function (result) {
});
});

我有同样的问题,我通过刷新 csrf 令牌来解决这个问题。新的csrf令牌进入ajax响应表单服务器并替换存储在表单隐藏字段中的旧令牌,当您再次提交时,请使用新令牌。它解决了我的问题,希望您的问题也通过这样做得到解决,以便更多地使用此链接 https://codeigniter.com/user_guide/libraries/security.html

$config['csrf_regenerate'] = TRUE时对我有用的解决方案是,对于为每个请求启用 CSRF 的后续 ajax 帖子,当请求失败时,由于令牌已过期,在 AJAX 中发出 GET 请求成功。然后有一个隐藏字段,该字段继续使用最新令牌更新,如果在发出请求时它已过期,则发出 GET 请求以获取最新的 TOKEN,然后在提交表单的函数或发出 POST 请求的函数上调用单击事件,这意味着该函数必须作为参数的一部分传递"this"或 ID。这使得用户无法实现在后台更新令牌的过程

相关内容

  • 没有找到相关文章