Mengubah HTTP Verb Logout dari POST menjadi GET


Di fitur autentikasi Laravel versi 5.3 dan 5.4, default HTTP verb untuk tautan /logout secara bawaan tipenya adalah POST. Bagi sebagian pemrogram, hal ini cukup menggangu karena tidak bisa diakses langsung melalui peramban.

Jika kita mengetikkan tautan localhost:8000/logout di peramban, hal ini tidak berhasil karena method-nya tidak sesuai dan peramban akan menampilkan pesan kesahalan seperti di gambar.

Method tidak diizinkan

Untuk memastikan method yang dikirim berupa POST, kita bisa membuat sebuah form yang akan di-submit ketika tombol logout atau tautan logout diklik.

Laravel sudah memberikan contohnya pada berkas app.blade.php.

Berkas app.blade.php dapat kalian temukan pada direktori resources/views/layouts dengan menjalankan perintah Artisan php artisan make:auth.

<ul class="dropdown-menu" role="menu">
    <li>
        <a href="{{ route('logout') }}"
            onclick="event.preventDefault();
                     document.getElementById('logout-form').submit();">
            Logout
        </a>

        <form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
            {{ csrf_field() }}
        </form>
    </li>
</ul>

Tanpa perlu membuat form untuk setiap aksi logout yang akan dilakukan, kita bisa mengubah HTTP verb tautan logout menjadi GET. Jadi, hanya dengan mengaksesnya langsung melalui peramban, maka akan langsung melakukan aksi hapus session user.

Tambahkan potongan skrip di bawah pada berkas routes/web.php.

Route::get('logout', '\App\Http\Controllers\Auth\LoginController@logout');

Pastikan posisi skripnya berada di atas skrip Auth::routes(). Untuk mengujinya, akses tautan localhost:8000/logout dari peramban. Pastikan juga bahwa kalian sudah login ke dalam aplikasi. Apakah hasilnya sudah sesuai?

Semoga berasil! 😉

***

Tulisan juga dapat dibaca pada Publikasi Medium Laravel Indonesia.

Tak Berkategori

Yugo Purwanto

Pemrogram PHP dan JavaScript yang sedang sibuk mengembangkan aplikasi Glosarium Bahasa Indonesia.

Tinggalkan Balasan