web-dev-qa-db-fra.com

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

J'utilise Laravel 5.4 et j'essaie de mettre en place un système d'authentification. J'ai utilisé la commande artisan php make: auth pour le configurer. J'ai édité les vues en fonction de ma mise en page. Maintenant, quand j'essaie de me déconnecter, cela me renvoie cette erreur

NotFoundHttpException dans la ligne 161 de RouteCollection.php:

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

21
Y.EzzEldin

Dans votre web.php (routes):

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.

66
Tauras

Eh bien, même si ce que suggère @Tauras fonctionne bien, je ne pense pas que ce soit la bonne façon de gérer cela. 

Vous avez dit que vous avez exécuté php artisan make:auth qui aurait également dû insérer Auth::routes(); dans vos fichiers de routage routes/web.php. Qui vient avec la route par défaut logout déjà définie et est nommé logout.

Vous pouvez voyez-le ici sur GitHub , mais je rapporterai aussi 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');
    }

Encore une fois, veuillez noter que logoutrequiertPOST en tant que méthode de requête HTTP. Il existe de nombreuses raisons valables à cela, mais il est très important d’éviter ainsi falsification de requêtes intersite.

Donc, selon ce que je viens de souligner, une manière correcte de mettre en œuvre ceci pourrait être juste ceci:

<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 boîte, prêt à fonctionner {{ csrf_field() }}

34
Sid

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

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

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

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

Je vous recommande de vous en tenir aux routes d'authentification Laravel dans web.php: Auth::routes()

Il créera l'itinéraire suivant:

POST | logout | App\Http\Controllers\Auth\LoginController@logout

Vous devrez vous déconnecter en utilisant un formulaire POST. De cette façon, vous aurez également besoin du jeton CSRF recommandé.

<form method="POST" action="{{ route('logout') }}">
  @csrf
  <button type="submit">Logout</button>
</form>
0
Jonathan Roy