Saya menggunakan Laravel 5.4 dan mencoba menerapkan sistem otentikasi. Saya menggunakan perintah php artisan make:auth untuk mengaturnya. Saya mengedit tampilan sesuai dengan tata letak saya. Sekarang, ketika saya mencoba untuk logout, saya mendapatkan kesalahan ini
NotFoundHttpException di RouteCollection.php baris 161:
adakah yang bisa membantu saya bagaimana cara logout?
Di web.php
(rute) Anda:
tambahkan:
Route::get('logout', '\App\Http\Controllers\Auth\LoginController@logout');
Dalam LoginController.php
Anda
tambahkan:
public function logout(Request $request) {
Auth::logout();
return redirect('/login');
}
Juga, di bagian atas LoginController.php
, setelah namespace
tambahkan:
use Auth;
Sekarang, Anda dapat logout menggunakan URL yourdomain.com/logout
atau jika Anda telah membuat tombol logout
, tambahkan href ke /logout
Bahkan jika apa yang disarankan oleh @Tauras berhasil, saya rasa itu bukan cara yang benar untuk menangani hal ini.
Anda mengatakan bahwa Anda telah menjalankan php artisan make:auth
yang seharusnya juga menyisipkan Auth::routes();
di file routing routes/web.php
Anda. Yang dilengkapi dengan rute logout
default yang sudah didefinisikan dan diberi nama logout
.
Anda dapat melihatnya di sini di GitHub, tetapi saya juga akan melaporkan kodenya di sini untuk mempermudah:
/**
* Register the typical authentication routes for an application.
*
* @return void
*/
public function auth()
{
// Authentication Routes...
$this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
$this->post('login', 'Auth\LoginController@login');
$this->post('logout', 'Auth\LoginController@logout')->name('logout');
// Registration Routes...
$this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
$this->post('register', 'Auth\RegisterController@register');
// Password Reset Routes...
$this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
$this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
$this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
$this->post('password/reset', 'Auth\ResetPasswordController@reset');
}
Sekali lagi harap dicatat bahwa logout
membutuhkan POST
sebagai metode permintaan HTTP. Ada banyak alasan yang valid di balik ini, tetapi hanya untuk menyebutkan satu yang sangat penting adalah bahwa dengan cara ini Anda dapat mencegah pemalsuan permintaan lintas situs.
Jadi menurut apa yang baru saja saya tunjukkan, cara yang benar untuk mengimplementasikan ini bisa jadi hanya ini:
<a href="{{ route('logout') }}" onclick="event.preventDefault(); document.getElementById('frm-logout').submit();">
Logout
</a>
<form id="frm-logout" action="{{ route('logout') }}" method="POST" style="display: none;">
{{ csrf_field() }}
</form>
Terakhir, perhatikan bahwa saya telah memasukkan fungsi siap pakai laravel di luar kotak {{ csrf_field() }}
!