Jeg bruker Laravel 5.4 og prøver å implementere et autentiseringssystem. Jeg brukte php artisan-kommandoen make: auth for å konfigurere den. Jeg redigerte visningene i henhold til oppsettet mitt. Nå, når jeg prøver å logge ut, får jeg denne feilen
NotFoundHttpException i RouteCollection.php linje 161:
kan noen hjelpe meg med å logge ut?
I web.php
(ruter):
add:
Route::get('logout', '\App\Http\Controllers\Auth\LoginController@logout');
I din LoginController.php
.
add:
public function logout(Request $request) {
Auth::logout();
return redirect('/login');
}
I toppen av LoginController.php
, etter namespace
, legger du til
add:
use Auth;
Nå kan du logge ut ved hjelp av URL-adressen dittdomene.com/logout
, eller hvis du har opprettet logout-knappen
, legg til href til /logout
.
Vel, selv om det som foreslås av @Tauras bare fungerer, tror jeg ikke det er den riktige måten å håndtere dette på.
Du sa at du har kjørt php artisan make:auth
som også burde ha satt inn Auth::routes();
i dine routes/web.php
rutingsfiler. Som kommer med standard logout
rute allerede definert og heter logout
.
Du kan se det her på GitHub, men jeg vil også rapportere koden her for enkelhets skyld:
/**
* 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');
}
Vær igjen oppmerksom på at logout
krever POST
som HTTP-forespørselsmetode. Det er mange gyldige grunner til dette, men bare for å nevne en veldig viktig grunn er at du på denne måten kan forhindre cross-site request forgery.
Så i henhold til det jeg nettopp har påpekt, kan en korrekt måte å implementere dette på være nettopp dette:
<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>
Legg til slutt merke til at jeg har satt inn laravel out of the box ready-funksjonen {{ csrf_field() }}
!