65 votes

Comment se déconnecter et rediriger vers la page de connexion en utilisant Laravel 5.4?

J'utilise Laravel 5.4 et j'essaie de mettre en œuvre un système d'authentification. J'ai utilisé la commande make: auth de php artisan pour le configurer. J'ai édité les vues selon ma disposition. Maintenant, quand j'essaye de me déconnecter, cela me lance cette erreur

NotFoundHttpException dans la ligne 161 de RouteCollection.php:

quelqu'un pourrait-il m'aider à me déconnecter?

180voto

Tauras Points 1580

Dans vos web.php (itinéraires):

ajouter:

 Route::get('logout', '\App\Http\Controllers\Auth\LoginController@logout');
 

Dans votre LoginController.php

ajouter:

 public function logout(Request $request) {
  Auth::logout();
  return redirect('/login');
}
 

De plus, en haut de LoginController.php , après namespace

ajouter:

 use Auth;
use Illuminate\Http\Request;
 

Maintenant, vous pouvez vous déconnecter en utilisant yourdomain.com/logout URL ou si vous avez créé logout button , ajoutez href à /logout

63voto

Sid Points 5659

Eh bien, même si ce que suggèrent par @Tauras fonctionne, tout simplement je ne pense pas que c'est la bonne façon de traiter avec ce.

Vous avez dit que vous avez exécuté php artisan make:auth qui ont également inséré Auth::routes(); votre routes/web.php routage de fichiers. Qui vient par défaut logout route déjà défini et est nommé d' logout.

Vous pouvez voir ici sur GitHub, mais je vais aussi signaler le code ici pour plus de simplicité:

    /**
     * Register the typical authentication routes for an application.
     *
     * @return void
     */
    public function auth()
    {
        // Authentication Routes...
        $this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
        $this->post('login', 'Auth\LoginController@login');
        $this->post('logout', 'Auth\LoginController@logout')->name('logout');
        // Registration Routes...
        $this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
        $this->post('register', 'Auth\RegisterController@register');
        // Password Reset Routes...
        $this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
        $this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
        $this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
        $this->post('password/reset', 'Auth\ResetPasswordController@reset');
    }

Puis de nouveau s'il vous plaît noter que logout exige POST que la méthode de requête HTTP. Il y a beaucoup de raison valable derrière tout cela, mais juste de parler d'un point très important est que, de cette façon, vous pouvez éviter cross-site request forgery.

Donc d'après ce que je viens de remarquer une bonne façon de mettre en œuvre ce pourrait être juste ce:

<a href="{{ route('logout') }}" onclick="event.preventDefault(); document.getElementById('frm-logout').submit();">
    Logout
</a>    
<form id="frm-logout" action="{{ route('logout') }}" method="POST" style="display: none;">
    {{ csrf_field() }}
</form>

Enfin, notez que j'ai inséré laravel hors de la zone de fonction, prête {{ csrf_field() }}!

21voto

usama muneer Points 81

Vous pouvez utiliser les éléments suivants dans votre contrôleur:

 return redirect('login')->with(Auth::logout());
 

10voto

voici une autre façon de le faire en appelant Auth :: logout () dans route

 Route::get('/logout', function(){
   Auth::logout();
   return Redirect::to('login');
});
 

3voto

Beefjeff Points 55

Dans 5.5

ajouter

Route::get('logout', 'Auth\LoginController@logout');

à mon fichier de routes fonctionne bien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X