Comment définir le chemin de redirection de laravel 5.3 logout?
N'y a-t-il pas de solution élégante pour rediriger vers une page spécifique après s'être déconnecté dans Laravel 5.3?
la fonction appelée vient 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 ne peux pas éditer le noyau. Mais n'y a-t-il pas une solution plus simple, parce qu'on a l'impression de trop se déconnecter manuellement, de se rincer et de se régénérer à nouveau.
11 réponses
C'est comme ça que je l'ai fait. Dans Auth\LoginController vous avez:
use AuthenticatesUsers;
Modifier:
use AuthenticatesUsers {
logout as performLogout;
}
alors, définissez un nouveau logout()
méthode dans votre LoginController:
public function logout(Request $request)
{
$this->performLogout($request);
return redirect()->route('your_route');
}
bien Sûr logout()
méthode dans ce trait a seulement 3 lignes (utilisé pour déconnecter les utilisateurs du système) de sorte que vous pouvez les copier à votre méthode, mais vous devriez toujours suivre le principe sec (ne pas se répéter) et réutiliser autant de code que vous le pouvez.
je n'héritent LoginController
et de remplacer les logout
fonction venant du trait là-dedans:
LoginController.php - > laissez cela 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 devriez vous rappeler de mettre à jour vos routes Auth en conséquence.
j'utilise Laravel-5.2, ce que j'ai utilisé est:
public function logout()
{
Auth::logout();
Session::flush();
return redirect('/');
}
assurez-vous que vous avez importé:
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
Dans votre contrôleur.
la méthode Auth::routes dans laravel 5.3 enregistre une route POST pour /logout au lieu d'une route GET. Cela empêche d'autres applications web de journaliser vos utilisateurs hors de votre application. Pour mettre à jour, vous devez soit convertir vos requêtes de déconnexion pour utiliser 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 il devrait fonctionner correctement et vous redirige vers le '/' répertoire qu'elle est définie dans le LoginController.php
tiré de: -
chaque action de déconnexion déclenche un événement Events\Logout
. Vous pouvez créer un auditeur 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
la façon la plus simple est de modifier le trait de déconnexion à LoginController
App\Http\Controllers\Auth\LoginController
comme ceci
public function logout(Request $request){
$this->guard()->logout();
$request->session()->flush();
$request->session()->regenerate();
return redirect()->route('you_route_name');
}
Si vous souhaitez rediriger, pourquoi ne pas vous venez de définir le retour redirect('/'); return redirect('yourroute');
si vous utilisez la sortie de la boîte AuthController, Ajoutez cette variable en haut et changez la chaîne de caractères pour rediriger où vous voulez.
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 : '/');
}
il suffit d'utiliser ceci dans routes/web.php
Route::get('logout', function (){
Auth::logout();
return redirect('your URL');
});
pour éviter de répéter le code de déconnexion et de suivre DRY, vous pouvez
- ajouter une route de déconnexion personnalisée dans Auth / LoginController, appel
Auth::logout()
et le retour de redirection vers votre chemin, ou - Ajouter un aprèsmiddleware (disons redirectAfterLogout) et l'ajouter à la déconnexion route
vous pouvez aller à vendor\laravel\framework\src\Illuminate\Foundation\Auth\AuthenticatesUsers.php
dans la fonction logout
modifier return redirect('/');
à votre adresse de route.