在代码点火器中调用模态 'CSRF & AJAX' REPOERROR 403



我正试图通过点击一个按钮调用我的Modal来添加用户:

html代码:

<button data-toggle="modal" data-target="#mymodal" data-id="<?php echo 'manager_user/user_add';?>" id="menu" class="btn btn-sm btn-primary">
Add User</button>

并且在我的模态形式中输入csrf名称&hash已插入!

<input type="hidden" name="csrf_token" value="<?=$this->security->get_csrf_hash();?>">

ajax#菜单由上面的按钮调用。

$(document).ready(function() {
$(document).on('click', '#menu', function(e) {
e.preventDefault();
var url = $(this).data('id'); // it will get action url
$('#dynamic-content').html(''); // leave it blank before ajax call
$('#modal-loader').show(); // load ajax loader
$.ajax({
url: url,
type: 'POST',
dataType: 'html'
})
.done(function(data) {
console.log(data);
$('#dynamic-content').html('');
$('#dynamic-content').html(data); // load response 
$('#modal-loader').hide(); // hide ajax loader 
})
.fail(function() {
$('#dynamic-content').html('<i class="glyphicon glyphicon-info-sign"></i> Something went wrong, Please try again...');
$('#modal-loader').hide();
});
});
});

$config['csrf_protection'] = TRUE;
$config['csrf_token_name'] = 'csrf_token';
$config['csrf_cookie_name'] = 'csrf_cookie_token';
$config['csrf_expire'   ] = 7200;
$config['csrf_regenerate'] = FALSE;

当我将csrf_prection设置为FALSE时,工作

我还添加了一个元到我的标题!!因此,当我点击显示我的模式以添加用户时,我会得到403禁止错误

错误AJAX消息:出现问题,请重试

如何解决csrf问题?

您可以创建一个控制器或方法以数组的形式检索csrf数据,当您通过ajax执行操作时,csrf令牌将自动更改。我的解决方案是通过我们创建的控制器或方法再次检索csrf数据,然后通过ajax重复调用。也许我的方法不是最好的,但这种方法可以解决您的问题

//助手

function csrf(){
$CI = get_instance();
$csrf = [
'name_key' => $CI->security->get_csrf_token_name(),
'hash' => $CI->security->get_csrf_hash()
];
return $csrf;
}

//控制器

<?php 
class Sec extends CI_Controller{
public function csrf_sec(){
echo json_encode(csrf());
}
}

//模态形式

<input type="hidden" id="csrf_key" name="<?=csrf()['name_key'];?>" value="<?=csrf()['hash'];?>">

//ajax

//get csrf one
$.ajax({
url: urls.concat('Sec/csrf_sec'),
dataType: 'json',
success: function (x) {
var hash = x.hash;
$.ajax({
url: urls.concat('Admin/mukimid'),
data: { id: id, key: key, csrf_key: hash },
dataType: 'json',
method: 'post',
success: function (data) {
//get csrf two
$.ajax({
url: urls.concat('Sec/csrf_sec'),
dataType: 'json',
success: function (x) {
$('#csrf_key').val(x.hash);
}
});
$('#id').val(data.id);
$('#nama_mukim').val(data.nama_mukim);
$('#nama_imum_mukim').val(data.nama_imum_mukim);
$('#luas').val(data.luas);
}
});
}
});

最新更新