Estoy usando Laravel 5.4 e intento implementar un sistema de autenticación. Utilicé el comando php craft make:auth para configurarlo. Edité las vistas de acuerdo con mi diseño. Ahora, cuando intento cerrar la sesión, me arroja este error
NotFoundHttpException en RouteCollection.php línea 161:
¿alguien podría ayudarme a cerrar la sesión?
En tu web.php (rutas):
agregar:
Route::get('logout', '\App\Http\Controllers\Auth\LoginController@logout'); En su LoginController.php
agregar:
public function logout(Request $request) { Auth::logout(); return redirect('/login'); } Además, en la parte superior de LoginController.php , después del espacio de namespace
agregar:
use Auth; Ahora, puede cerrar sesión usando yourdomain.com/logout URL o si ha creado un logout button de sesión, agregue href a /logout
Bueno, incluso si lo que sugiere @Tauras simplemente funciona, no creo que sea la forma correcta de lidiar con esto.
Dijiste que ejecutaste php artisan make:auth que también debería haber insertado Auth::routes(); en sus archivos de enrutamiento de routes/web.php . Que viene con la ruta de cierre de logout predeterminada ya definida y se llama logout .
Puede verlo aquí en GitHub , pero también informaré el código aquí para simplificar:
/** * 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'); } Por otra parte, tenga en cuenta que el cierre de logout requiere POST como método de solicitud HTTP. Hay muchas razones válidas detrás de esto, pero solo para mencionar una muy importante es que de esta manera puede evitar la falsificación de solicitudes entre sitios .
Entonces, de acuerdo con lo que acabo de señalar, una forma correcta de implementar esto podría ser solo esta:
<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> Finalmente, tenga en cuenta que he insertado laravel lista para usar función {{ csrf_field() }} !
Puede usar lo siguiente en su controlador:
return redirect('login')->with(Auth::logout());