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.
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 direktoriresources/views/layouts
dengan menjalankan perintah Artisanphp 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! 😉
Originally published at www.laravel.web.id on April 17, 2017.