route method php laravel laravel-5.3

php - method - route logout laravel



¿Cómo configurar laravel 5.3 logout redirect path? (11)

¿No hay una solución elegante para redirigir a una página específica después de cerrar sesión en Laravel 5.3?

La función que se llama proviene del rasgo AutenticadoresUsuarios :

public function logout(Request $request) { $this->guard()->logout(); $request->session()->flush(); $request->session()->regenerate(); return redirect(''/''); }

Esta es una función predeterminada del núcleo de laravel. Entonces, tengo que anular toda la función, no puedo editar el núcleo. Pero, ¿no hay una solución más simple, porque se siente exagerado para cerrar la sesión manualmente, purgar y regenerar nuevamente?


Así es como lo hice. En Auth / LoginController tienes:

use AuthenticatesUsers;

Cambiarlo a:

use AuthenticatesUsers { logout as performLogout; }

Luego, defina un nuevo método logout() en su LoginController:

public function logout(Request $request) { $this->performLogout($request); return redirect()->route(''your_route''); }

Claro, el método de logout() regular logout() en ese rasgo tiene solo 3 líneas (usadas para registrar usuarios fuera del sistema) para que pueda copiarlas a su método, pero siempre debe seguir el principio SECO (no repetirlo) y re -utiliza la mayor cantidad de código que puedas.


Cada acción de cierre de sesión desencadena un evento Events/Logout . Puede crear un oyente que escuche este evento y agregue algo de lógica allí. Obtenga más información sobre los oyentes aquí https://laravel.com/docs/5.3/events


El método Auth :: routes en laravel 5.3 registra una ruta POST para / logout en lugar de una ruta GET. Esto evita que otras aplicaciones web puedan registrar a sus usuarios fuera de su aplicación. Para actualizar, debe convertir sus solicitudes de cierre de sesión para usar el verbo POST o simplemente registrar su propia ruta GET para el URI / logout agregando esta ruta al archivo Routes / web.php: -

Route::get(''/logout'', ''Auth/LoginController@logout'');

y debería funcionar bien y redirigirlo al directorio ''/'' tal como está definido en el LoginController.php

Citado de:-

https://laravel.com/docs/5.3/upgrade


Estoy usando Laravel-5.2 , lo que utilicé fue:

public function logout() { Auth::logout(); Session::flush(); return redirect(''/''); }

Asegúrate de haber importado:

use Illuminate/Support/Facades/Auth; use Illuminate/Support/Facades/Session;

En tu controlador.


La forma más sencilla es anular el rasgo de LoginController en LoginController en App/Http/Controllers/Auth/LoginController como este

public function logout(Request $request){ $this->guard()->logout(); $request->session()->flush(); $request->session()->regenerate(); return redirect()->route(''you_route_name''); }


Para evitar repetir el código de salida y seguir SECO, puede

  • Agregue una ruta de cierre de sesión personalizada en Auth / LoginController , llame a Auth::logout() y regrese a su ruta, o
  • Agregue un middleware posterior (digamos redirectAfterLogout ) y agréguelo a la ruta de cierre de sesión

Si desea redirigir, ¿por qué no establece la redirección de retorno (''/''); para volver a redirigir (''yourroute'');


Si está utilizando AuthController, agregue esta variable al principio y luego cambie la cadena para redirigir a donde quiera.

protected $redirectAfterLogout = ''/'';

La clase AuthenticatesUsers tiene una función de cierre de sesión que verifica esta variable.

public function logout() { Auth::guard($this->getGuard())->logout(); return redirect(property_exists($this, ''redirectAfterLogout'') ? $this->redirectAfterLogout : ''/''); }


Solo use esto en routes / web.php

Route::get(''logout'', function (){ Auth::logout(); return redirect(''your URL''); });


Yo heredaría LoginController y anularía la función de logout que proviene del rasgo allí:

LoginController.php -> deja eso tal como está.

MyLoginController.php :

class MyLoginController extends LoginController { protected $redirectAfterLogout = ''/goodbye''; public function logout(Request $request) { $this->guard()->logout(); $request->session()->flush(); $request->session()->regenerate(); return redirect($this->redirectAfterLogout); } }

Por supuesto, debes recordar actualizar tus rutas de autenticación en consecuencia.


puede ir al vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php en la función logout change return redirect(''/''); a su dirección de ruta.