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?
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
.
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 logout
requiertPOST
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() }}
!
Vous pouvez utiliser les éléments suivants dans votre contrôleur:
return redirect('login')->with(Auth::logout());
voici une autre façon de le faire en appelant Auth :: logout () dans route
Route::get('/logout', function(){
Auth::logout();
return Redirect::to('login');
});
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>