Muhammad Amirul Ihsan
Muhammad Amirul Ihsan Fullstack Developer, Content Creator, suka berbagi pengalaman / pengetahuan lewat tulisan maupun video di kawankoding.com

Menangani Error 419 di Laravel

Selasa, 13 Februari 2024
Menangani Error 419 di Laravel

Menangani Error 419 Page Expired Laravel

Sebagai programmer yang ngoding Laravel, kita kayaknya gak asing dengan error 419 Page Expired ketika kita membuat aplikasi dengan Laravel.

Ini sering terjadi karena sebuah masalah sederhana yang berhubungan dengan token CSRF (Cross-Site Request Forgery).

Mengapa 419 Page Expired terjadi dan bagaimana mengatasinya

Pada aplikasi Laravel yang kita buat versi berapapun kita seharusnya menggunakan directive @csrf pada setiap form yang kita miliki.

@csrf ini akan membuat sebuah inputan tersembunyi <input type="hidden" ..../> yang berisi token CSRF secara otomatis ketika form disubmit.

Token ini digunakan untuk memastikan bahwa form yang disubmit berasal dari aplikasi kita dan bukan dari pihak ketiga (3rd party).

Lalu, apa sih yang menyebabkan error 419 Page Expired ini terjadi ? biasanya karena token yang dikirim nggak cocok, bisa terjadi karena beberapa alasan.

  • Terkadang, kita sudah membuka sebuah halaman form, dan membiarkannya dalam waktu yang cukup lama dan token yang dibuat sudah expired. Ini adalah sebuah hal yang baik, walaupun dulunya saya ingin menghilangkan hal seperti ini, kalau gak salah ada sebuah package yang membantu supaya tokenya jadi valid dalam waktu yang lama. Tapi makin kesini paham bahwa hal tersebut malah kurang baik buat keamanan, jadi kalau memang halamannya ditinggal dalam waktu yang lama ya harusnya seperti itu 419 Page Expired. Solusinya pun sangat sederhana, cukup refresh browser dan submit ulang formnya.
  • Yang kedua, mungkin saja kita lupa menambahkan directive @csrf dalam form kita. Ini yang sering saya temui dan kadang saya lakukan sendiri :D, padahal udah lama banget ngoding Laravel. Untungnya ada middleware VerifyCsrfToken.php yang memfilter request yang masuk dengan memberi error 419 Page Expired, yang walaupun terkadang menjengkelkan juga wkwk

Menonaktifkan CSRF pada beberapa halaman

Pada suatu waktu, pernah kejadian integrasi dengan API pihak ketiga yang membutuhkan webhook dari aplikasi kita. Dan webhooknya tidak berupa request API dengan JSON atau apalah ya, tapi berupa sebuah form dari aplikasi kita yang memiliki inputan sesuai yang mereka inginkan dan inputannya semua dihide / hidden.

Jika punya kejadian seperti pengalaman saya tersebut, kita bisa menonaktifkan CSRF pada beberapa halaman, yang pasti jangan menonaktfikan middleware VerifyCsrfToken secara keseluruhan ya :D.

Nah untuk kebutuhan tersebut, kita bisa menambahkan pengecualian pada file VerfiyCsrfToken.php yang ada pada app/Http/Middleware.

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array<int, string>
     */
    protected $except = [
        '/halaman',
        '/halaman-lainnya',
    ];
}