Estoy usando Laravel 5.4 y tratando de implementar el sistema de autenticación. He utilizado el comando make:auth de php artisan para configurarlo. He editado las vistas de acuerdo a mi diseño. Ahora, cuando estoy tratando de 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 su web.php
(rutas):
añadir:
Route::get('logout', '\App\Http\Controllers\Auth\LoginController@logout');
En su LoginController.php
add:
public function logout(Request $request) {
Auth::logout();
return redirect('/login');
}
Además, en la parte superior de LoginController.php
, después de namespace
add:
use Auth;
Ahora, usted es capaz de cerrar la sesión utilizando su dominio.com/logout
URL o si ha creado botón de salida
, añadir href a /logout
Bueno, incluso si lo que sugiere @Tauras funciona, no creo que sea la forma correcta de tratar esto.
Has dicho que has ejecutado php artisan make:auth
que también debería haber insertado Auth::routes();
en tus archivos de enrutamiento routes/web.php
. Que viene con la ruta por defecto logout
ya definido y se llama logout
.
Puedes verlo aquí en GitHub, pero también reportaré 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 logout
requiere POST
como método de solicitud HTTP. Hay muchas razones válidas detrás de esto, pero sólo para mencionar uno muy importante es que de esta manera se puede prevenir falsificación de peticiones entre sitios.
Así que de acuerdo con lo que acabo de señalar una forma correcta de implementar esto podría ser sólo esto:
<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>
¡Por último, tenga en cuenta que he insertado laravel fuera de la función lista {{ csrf_field() }}
!