Saya membuat sistem laravel dan menyertakan perancah Auth yang dinyatakan dalam dokumentasi. Saya menginstalnya dengan menggunakan

composer require laravel/ui --dev

php artisan ui vue --auth

Dan menjalankan npm install dan npm run dev untuk mengompilasi aset. Tapi untuk beberapa alasan aneh rute /logout mengembalikan 404. Rute saya terlihat seperti ini

Route::get('/', function () {
    return view('welcome');
});

Auth::routes();

Saya tidak tahu di mana mencarinya. Bagaimana saya bisa memperbaiki ini?

1
Rainier laan 23 Januari 2020, 22:08

2 jawaban

Jawaban Terbaik

Jika Anda melihat vendor/laravel/framework/src/Illuminate/Routing/Router.php Anda akan melihat potongan kode ini:

public function auth(array $options = [])
{
    // Authentication Routes...
    $this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
    $this->post('login', 'Auth\LoginController@login');
    $this->post('logout', 'Auth\LoginController@logout')->name('logout');
...

Artinya tidak ada rute GET yang ditentukan untuk logout, hanya POST. Itu sebabnya Anda mendapatkan respons 404. Anda dapat menambahkan satu rute GET sendiri dengan halaman khusus, jika perlu, seperti:

Route::get('/logout', function () {
    return view('my_logout_view');
});
2
Felippe Duarte 23 Januari 2020, 19:14

Rute logout adalah permintaan POST seperti yang dinyatakan oleh orang lain. Jika Anda ingin menggunakannya, Anda

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

<form id="logout-form" action="{{ route('logout') }}" method="POST" class="hidden">
{{ csrf_field() }}
</form>

Perhatikan bahwa method dalam formulir disetel ke POST dan bahwa kami menggunakan {{ csrf_field() }} sehingga kami diizinkan untuk membuat permintaan itu.

0
Jesse 23 Januari 2020, 19:42