php - ¿Cómo cerrar sesión y redirigir a la página de inicio de sesión utilizando Laravel 5.4?
laravel-5.4 (6)
Estoy usando Laravel 5.4 e intento implementar el sistema de autenticación. Utilicé el comando php artisan make: auth para configurarlo. Edité las vistas de acuerdo a mi diseño. Ahora, cuando estoy tratando de cerrar la sesión me está lanzando este error
NotFoundHttpException en la línea 161 de RouteCollection.php:
¿Podría alguien ayudarme a cerrar la sesión?
Aquí hay otra forma de hacerlo llamando a Auth :: logout () en ruta.
Route::get(''/logout'', function(){
Auth::logout();
return Redirect::to(''login'');
});
Bueno, incluso si lo que sugiere @Tauras simplemente funciona, no creo que sea la forma correcta de lidiar con esto.
Usted dijo que ha ejecutado php artisan make:auth
que también debería haber insertado Auth::routes();
en tus routes/web.php
archivos de enrutamiento. Que viene con la ruta de logout
predeterminada ya definida y se llama logout
.
Puedes verlo aquí en GitHub , pero también informaré el código aquí por simplicidad:
/**
* 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'');
}
Entonces nuevamente, tenga en cuenta que el logout
requiere POST
como método de solicitud HTTP. Hay muchas razones válidas detrás de esto, pero solo por mencionar una muy importante es que de esta manera usted puede prevenir 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 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 la función de listo de la caja {{ csrf_field() }}
!
En 5.5
añadiendo
Route::get(''logout'', ''Auth/LoginController@logout'');
a mi archivo de rutas funciona bien.
Puedes usar lo siguiente en tu controlador:
return redirect(''login'')->with(Auth::logout());
Si usó el andamio de autenticación en 5.5, simplemente dirija su href
a:
{{ route(''logout'') }}
No es necesario alterar ninguna ruta o controlador.
En su web.php
(rutas):
añadir:
Route::get(''logout'', ''/App/Http/Controllers/Auth/LoginController@logout'');
En su LoginController.php
añadir:
public function logout(Request $request) {
Auth::logout();
return redirect(''/login'');
}
Además, en la parte superior de LoginController.php
, después del namespace
añadir:
use Auth;
use Illuminate/Http/Request;
Ahora, puede cerrar sesión usando la URL de yourdomain.com/logout
o si ha creado el logout button
, agregue href a /logout