Codeigniter4 datatable Server Side dengan CSRF

Codeigniter4 datatable Server Side dengan CSRF
Tutorial ini sebenarnya lanjutan dari tutorial sebelumnya yaitu [Integrasi Codeigniter 4 dengan Datatable Server Side]. jika kamu belum tahu ada baiknya untuk membaca terlebih dahulu tutorial sebelumnya.

Aktifkan csrf di app/Config/Filters.php

public $globals = [
        'before' => [
                //csrf
                'csrf'
        ]
];

Setelah mengaktifkan csrf kita dapat menggunakan fungsi csrf_token() untuk mengetahui nama csrfnya dan fungsi csrf_hash() untuk mengambil nilai csrfnya. pada codeigniter4 ini admin coba sudah auto regenerate pada csrfnya.

Edit controller Icd

tambahkan $output[csrf_token()] = csrf_hash(); sebelum echo json_encode($output); pada fungsi ajax_list(). Sehingga jadinya seperti ini:

public function ajax_list()
  {
    $request = Services::request();
    $m_icd = new Model_icd($request);
    if($request->getMethod(true)=='POST'){
      $lists = $m_icd->get_datatables();
          $data = [];
          $no = $request->getPost("start");
          foreach ($lists as $list) {
              	$no++;
                  $row = [];
                  $row[] = $no;
                  $row[] = $list->kode_icd;
                  $row[] = $list->nama_icd;
                  $data[] = $row;
      }

      $output = ["draw" => $request->getPost('draw'),
                          "recordsTotal" => $m_icd->count_all(),
                          "recordsFiltered" => $m_icd->count_filtered(),
                          "data" => $data];
          $output[csrf_token()] = csrf_hash();  
          echo json_encode($output);
    }
  }

Edit view Icd

Pada viewnya sama saja bentuknya cuman berbeda pada fungsi csrf yang dipanggil contohnya seperti berikut untuk pada kode javascriptnya:

<script type="text/javascript">
$(document).ready( function () {
  var token = "<?= csrf_hash() ?>";
  var table = $('#myTable').DataTable({ 

    "processing": true,
    "serverSide": true,
    "order": [],

    "ajax": {
        "url": "<?php echo base_url('icd/ajax_list')?>",
        "type": "POST",
        data: function ( d ) {
         d.<?= csrf_token() ?> = token;
       }
    },

    //optional
    "lengthMenu": [[5, 10, 25], [5, 10, 25]],

    "columnDefs": [
    { 
        "targets": [0,1,2],
        "orderable": true,
    },
    ],

});

  table.on('xhr.dt', function ( e, settings, json, xhr ) {
        token = json.<?= csrf_token() ?>;
    } );

} );
</script>

Simpan dan selesai kini codeingiter4 kita sudah memakai security csrf.

Bagaimana kalau di codeigniter3? tutorialnya ada disini Codeignter3 dengan Datatable dan CSRF Auto Regenerate

Referensi
https://codeigniter.com/user_guide/libraries/security.html

Related posts

Leave a Comment