web-dev-qa-db-fra.com

Comment définir le chemin de redirection de déconnexion laravel 5.3?

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.

33
Tim van Uum

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.

41
Avram

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.

10
Kaloyan Doichinov

Laravel> 5.7

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');
}
10
Chris

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.

6
Sachith

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: -

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

3
Mohamed Gabr

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');
}
2
ArtemSky

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

2
Andrej Ludinovskov

Il suffit de l'utiliser dans routes/web.php

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

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 : '/');
}
1
cyclops1101

Pour éviter de répéter le code de déconnexion et de suivre DRY, vous pouvez 

  • Ajoutez un itinéraire de déconnexion personnalisé dans Auth/LoginController , appelez Auth::logout() et renvoyez la redirection vers votre chemin, ou 
  • Ajoutez un middleware after - (dites redirectAfterLogout ) et ajoutez-le à la route de déconnexion
0
Aranya Sen

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');
}
0
Omid Ahmadyani

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

0
S. Domeng