N'y a-t-il pas de solution élégante pour rediriger vers une page spécifique après la déconnexion dans Laravel 5.3?
La fonction appelée provient du trait AuthenticatesUsers :
public function logout(Request $request)
{
$this->guard()->logout();
$request->session()->flush();
$request->session()->regenerate();
return redirect('/');
}
C'est une fonction par défaut du noyau de laravel. Je dois donc écraser toute la fonction car je ne peux pas éditer le noyau . Mais n’existe-t-il pas une solution plus simple, car on aurait l'impression que l'on a trop de ressources pour se déconnecter, se vider et se régénérer manuellement.
Voici comment je l'ai fait. Dans Auth\LoginController, vous avez:
use AuthenticatesUsers;
Changez le en:
use AuthenticatesUsers {
logout as performLogout;
}
Ensuite, définissez une nouvelle méthode logout()
dans votre LoginController:
public function logout(Request $request)
{
$this->performLogout($request);
return redirect()->route('your_route');
}
Bien sûr, la méthode logout()
régulière dans ce trait n'a que 3 lignes (utilisée pour déconnecter les utilisateurs du système) afin que vous puissiez les copier sur votre méthode, mais vous devez toujours suivre le principe DRY (ne vous répétez pas). et réutilisez autant de code que vous pouvez.
J'hériterais de LoginController
et surchargerais la fonction logout
provenant du trait qui s'y trouve:
LoginController.php -> laissez-le tel quel.
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);
}
}
Bien sûr, vous devez vous rappeler de mettre à jour vos itinéraires d'authentification en conséquence.
La réponse acceptée est correcte, mais vous pouvez complètement éviter de toucher à la logique de déconnexion en écrasant simplement la méthode loggedOut
:
// App\Http\Controllers\Auth\LoginController.php
protected function loggedOut(Request $request) {
return redirect('/where/ever/you/want/to/go');
}
J'utilise Laravel-5.2 , ce que j'ai utilisé était:
public function logout()
{
Auth::logout();
Session::flush();
return redirect('/');
}
Assurez-vous d'avoir importé:
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
Dans votre contrôleur.
La méthode Auth :: routes de laravel 5.3 enregistre une route POST pour/logout au lieu d’une route GET. Cela empêche les autres applications Web de déconnecter vos utilisateurs de votre application. Pour mettre à niveau, vous devez convertir vos demandes de déconnexion en utilisant le verbe POST ou simplement enregistrer votre propre route GET pour l'URI/logout en ajoutant cette route au fichier Routes/web.php: -
Route::get('/logout', 'Auth\LoginController@logout');
et cela devrait fonctionner correctement et vous rediriger vers le répertoire '/' tel que défini dans le fichier LoginController.php
Cité de: -
Le moyen le plus simple consiste à remplacer le trait de connexion à LoginController
dans App\Http\Controllers\Auth\LoginController
public function logout(Request $request){
$this->guard()->logout();
$request->session()->flush();
$request->session()->regenerate();
return redirect()->route('you_route_name');
}
Chaque action de déconnexion déclenche un événement Events\Logout
. Vous pouvez créer un écouteur qui écoute cet événement et y ajouter de la logique. En savoir plus sur les auditeurs ici https://laravel.com/docs/5.3/events
Il suffit de l'utiliser dans routes/web.php
Route::get('logout', function (){
Auth::logout();
return redirect('your URL');
});
Si vous utilisez AuthController prêt à l'emploi, ajoutez cette variable en haut, puis modifiez la chaîne pour la rediriger où vous le souhaitez.
protected $redirectAfterLogout = '/';
La classe AuthenticatesUsers a une fonction de déconnexion qui vérifie cette variable.
public function logout()
{
Auth::guard($this->getGuard())->logout();
return redirect(property_exists($this, 'redirectAfterLogout') ? $this->redirectAfterLogout : '/');
}
Pour éviter de répéter le code de déconnexion et de suivre DRY, vous pouvez
Auth::logout()
et renvoyez la redirection vers votre chemin, ou La réponse acceptée est correcte, mais vous pouvez complètement éviter de toucher à la logique de déconnexion en écrasant simplement la méthode logsOut:
protected function loggedOut(Request $request) {
return redirect('/where/ever/you/want/to/go');
}
En supposant que quelqu'un le regarde maintenant depuis quelques jours et que la version du laravel qu'ils utilisent est la version 5.7
Ajouter cette ligne dans LoginController.js
public function logout()
{
Auth::logout();
return redirect()->to('/your-route');
}
Cela suppose que vous utilisez le module d’authentification prêt à l'emploi fourni par laravel