Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- //Berikut cara mengatasi seputar masalah csrf Token ketika regenerate setting ke true Ala Abdul Azis (JrengGo)
- //saya misalkan untuk kasus menampilkan Data Page list via datatable server side
- //1. set up .env seperti di bawah
- security.csrfProtection = 'cookie'
- security.tokenRandomize = false
- security.tokenName = 'csrf_jrenggo' (//sesuaikan nama masing-masing token csrf nya)
- security.headerName = 'X-CSRF-TOKEN'
- security.cookieName = 'csrf_cookie_secure' //mau diganti atau default bebas
- security.expires = 5000
- security.regenerate = true
- security.redirect = false //(true or false bebas sesuai keinginan Default : false{redirect manual});
- // 2. Controller Setup
- //buat method untuk menampilkan data server side (sesuaikan nama field masing masing dan object atau array bebas sesuka hati)
- public function listpage()
- {
- if ($this->request->isAJAX()) {
- $lists = $this->page->get_datatables();
- $csrfName = csrf_token();
- $csrfHash = csrf_hash();
- $data = [];
- $no = $this->request->getPost("start");
- foreach ($lists as $li) {
- $no++;
- $row = [];
- $row[] = $no;
- $row[] = $li->judul;
- $row[] = '<a target="_blank" href="hal/' . $li->judul_seo . '">hal/' . $li->judul_seo . '</a>';
- $row[] = $li->tgl_posting;
- $row[] = b_action($li->id_halaman);
- $data[] = $row;
- }
- $output = [
- "draw" => $this->request->getPost("draw"),
- "recordsTotal" => $this->page->count_all(),
- "recordsFiltered" => $this->page->count_filtered(),
- "data" => $data,
- ];
- $output[$csrfName] = $csrfHash; //wajib disertakan agar nilai hash bisa dipassing via json ke views sesuai nama token masing masing
- echo json_encode($output); //passing data ke views
- } else {
- exit(throw \CodeIgniter\Exceptions\PageNotFoundException::forPageNotFound()); //lempar exit untuk secure tambahan
- }
- }
- ?>
- 3. berikutnya setting ke views
- //sesuaikan dengan pribadi coding agan semua
- //input type hidden wajib disertakan
- <!DOCTYPE html>
- <html>
- <div class=" table-responsive">
- <input type="hidden" name="<?= csrf_token() ?>" value="<?= csrf_hash() ?>" id="csrfJrenggo" />
- <table id="showData" class="table table-bordered table-striped">
- <thead>
- <tr>
- <th style="width:5px;">No.</th>
- <th>Judul</th>
- <th>Link</th>
- <th>Tgl Post</th>
- <th style="width:50px;">Act</th>
- </tr>
- </thead>
- <tbody>
- </tbody>
- </table>
- </div>
- <script>
- $(document).ready(function() {
- $('#showData').DataTable({
- 'destroy': true, //kutip satu pada tulisan destroy boleh dibuang atau digunakan bebas
- //begitu untuk responsive autoWidth processing dll
- 'responsive': true,
- 'autoWidth': false,
- 'processing': true,
- 'serverSide': true,
- 'order': [],
- 'ajax': {
- 'url': "<?= base_url('s/viewp'); ?>",
- 'type': 'POST',
- "data": {
- csrf_jrenggo: $('input[name=csrf_jrenggo]').val(), //ambil nilai csrf sesuai nama token input dari .env (wajib)
- },
- "data": function(data) {
- data.csrf_jrenggo = $('input[name=csrf_jrenggo]').val() //function bridge token view to controller (wajib)
- },
- "dataSrc": function(response) {
- $('input[name=csrf_jrenggo]').val(response.csrf_jrenggo); //dataSrc untuk random request token char (wajib)
- return response.data;
- },
- },
- 'columnDefs': [{
- 'targets': [0, 4], //sesuaikan kolom yang tidak mau di sort
- 'orderable': false
- }, ],
- })
- })
- </script>
- </html>
Add Comment
Please, Sign In to add comment