php - cómo administrar un error especial con un mensaje especial en laravel
laravel-5 error-handling (2)
Estoy usando laravel 5.4. y necesito manejar algún error. Imagine que el usuario inició sesión y abrió dos ventanas (su perfil). Cuando el usuario hace clic en cerrar sesión en una ventana, todavía tenemos el botón de cerrar sesión en otra ventana, y al hacer clic en eso, laravel mostrará la página de error csrf_token.
Mi cierre de sesión no es ajax y se trata de enviar un formulario a /logout
¿cómo puedo manejar este error con un mensaje especial o redireccionar a mi casa sin error desde el controlador de cierre de sesión? (no todos los errores csrf_token
, solo desde ese controlador).
formulario de cierre de sesión:
Enviaré este formulario haciendo clic en el botón de cerrar sesión usando jquery:
<form id="logout-form" action="/logout" method="POST" style="display: none;">
<input type="hidden" name="_token" :value="token">
</form>
Y el método de cierre de sesión en el controlador:
public function logout(Request $request)
{
$this->guard()->logout();
$request->session()->flush();
$request->session()->regenerate();
return redirect(''/'');
}
Una forma es utilizar GET
para su cierre de sesión. De hecho, utilizar un simple <a href="/logout">logout</a>
debería ser suficiente. Así que cambias tu ruta para usar get y puedes decir adiós a la forma.
Aunque, puede haber opiniones diferentes sobre el MÉTODO a utilizar, pero sinceramente, esto es suficiente.
Actualizar
¿No hay forma de gestionar errores como lo dije?
En mi opinión, esto es lo mejor que haría por ahora. De lo contrario, para mostrar un mensaje especial cuando alguien intenta la ruta de cierre de sesión a pesar de que están desconectados, haré lo siguiente:
public function logout(Request $request)
{
if (!auth()->check()) {
return redirect(''/'')->with(''login_error'', ''You are already logged out please login again''); // message can be retrieved in session()
}
$this->guard()->logout();
$request->session()->flush();
$request->session()->regenerate();
return redirect(''/'');
}
Todavía no utilizaré la publicación, ya que no estoy creando ningún recurso.
Espero que esto ayude.
en App / Exceptions / Handler.php Devuelva al usuario al formulario con un nuevo token CSRF válido, por lo que la página se actualizará y el botón de cerrar sesión no existirá.
public function render($request, Exception $exception)
{
if($exception instanceof TokenMismatchException)
{
return redirect()
->back()
->with(''your msg'');
}
return parent::render($request, $exception);
}
esta apariencia, la página se actualizó .
No reemplace POST con Get. No será seguro y estándar.