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.

31
demandé sur Tim van Uum 2016-09-05 12:51:24

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.

36
répondu Avram 2016-11-30 12:06:11

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.

10
répondu Kaloyan Doichinov 2016-09-05 10:16:10

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.

5
répondu Sachith 2016-11-30 12:28:37

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

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

3
répondu Mohamed Gabr 2017-01-20 19:58:46

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

2
répondu Andrej Ludinovskov 2016-09-05 10:06:29

la façon la plus simple est de modifier le trait de déconnexion à LoginControllerApp\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');
}
2
répondu ArtemSky 2016-10-27 13:54:58

Si vous souhaitez rediriger, pourquoi ne pas vous venez de définir le retour redirect('/'); return redirect('yourroute');

1
répondu pseudoanime 2016-09-05 09:56:57

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 : '/');
}
1
répondu cyclops1101 2017-02-02 00:33:48

il suffit d'utiliser ceci dans routes/web.php

Route::get('logout', function (){
Auth::logout();
return redirect('your URL');
});
1
répondu Xander 2017-07-20 05:42:40

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
0
répondu Aranya Sen 2017-02-09 06:31:56

vous pouvez aller à vendor\laravel\framework\src\Illuminate\Foundation\Auth\AuthenticatesUsers.php dans la fonction logout modifier return redirect('/'); à votre adresse de route.

-2
répondu z.gomar 2016-11-24 09:48:57