Hoe uitloggen en omleiden naar de inlogpagina met Laravel 5.4?

Ik gebruik Laravel 5.4 en probeer een authenticatiesysteem te implementeren. Ik heb het php artisan-commando make:auth gebruikt om het in te stellen. Ik heb de weergaven bewerkt volgens mijn lay-out. Nu, wanneer ik probeer uit te loggen, krijg ik deze foutmelding

NotFoundHttpException in RouteCollection.php regel 161:

Kan iemand mij helpen hoe uit te loggen?


Antwoord 1, autoriteit 100%

In uw web.php(routes):

toevoegen:

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

In uw LoginController.php

toevoegen:

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

Ook bovenaan LoginController.php, na namespace

toevoegen:

use Auth;

U kunt nu uitloggen met de yourdomain.com/logoutURL of als u een logout buttonheeft gemaakt, voeg href toe aan /logout


Antwoord 2, autoriteit 34%

Nou, zelfs als de suggestie van @Tauras gewoon werkt, denk ik niet dat dit de juiste manier is om hiermee om te gaan.

Je zei dat je php artisan make:authhebt uitgevoerd, wat ook Auth::routes();had moeten invoegen in je routes/web.phprouteringsbestanden. Die wordt geleverd met de standaard logout-route die al is gedefinieerd en wordt logoutgenoemd.

Je kunt het hier op GitHub bekijken , maar ik zal de code hier ook voor de eenvoud rapporteren:

   /**
     * 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');
    }

Houd er rekening mee dat logoutvereistPOSTals HTTP-verzoekmethode. Hier zijn veel geldige redenen voor, maar om er één te noemen die erg belangrijk is, is dat u op deze manier vervalsing van verzoeken over meerdere siteskunt voorkomen.

Dus volgens wat ik zojuist heb aangegeven, zou een juiste manier om dit te implementeren precies dit kunnen zijn:

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

Ten slotte merk ik op dat ik de laravel kant-en-klare functie {{ csrf_field() }}heb ingevoegd!


Antwoord 3, autoriteit 11%

Je kunt het volgende in je controller gebruiken:

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

Other episodes