web-dev-qa-db-fra.com

Laravel 5.4.24 lève une exception MethodNotAllowedHttpException lors de la déconnexion d'utilisateurs

Je travaille sur un système d'authentification dans Laravel 5.4.24. Je reçois une erreur sur mon navigateur lorsque j'essaie de me déconnecter: MethodNotAllowedHttpException dans RouteCollection.php à la ligne 251.

La route de déconnexion dans le fichier web.php du répertoire routes est la suivante:

Route::post('logout', 'Auth\LoginController@logout')->name('logout'); 

Le contrôleur stocké app/Http/LoginController.php a le code suivant:

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers;
    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }
}

Question mise à jour Le code ci-dessous est mon login.blade.php

@extends('main')

@section('title', '| login')

@section('content')
    <div class='row'>
        <div class='col-md-6 col-md-offset-3'>
            {!! Form::open() !!}

                {{ Form::label('email', 'Email:') }}
                {{  Form::email('email', null, ['class' => 'form-control']) }}

                {{  Form::label('password', 'Password:') }}
                {{  Form::password('password', ['class' => 'form-control'])  }}

                <br>
                {{  Form::checkbox('remember') }} {{  Form::label('remember', 'Remember Me:') }}

                <br>
                {{  Form::submit('Login', ['class' => 'btn btn-primary btn-block']) }}


            {!!  Form::close()  !!}
        </div>
    </div>

@endsection

main.blade.php

<!DOCTYPE html>
<html lang="en">
<!-- Connection to the partials called _head.blade.php -->
@include('partials._head')
<body>

    @include('partials._nav')

    <!-- The below class container holds all body content-->
    <div class='container'>

        @include('partials._messages')

        {{ Auth::check() ? "Logged In" : "Logged Out"}}

        @yield('content')

        @include('partials._footer')
    </div> <!-- End of container -->

    @include('partials._javascript')
    @yield('scripts')
</body>
</html>
5
Martin
Route::get('logout', function(){

     return back();

});

Route::post('logout', 'AuthController@logout');
1
Alejandro Gonzlez

Laravel 5.4+ utilise la méthode post pour se déconnecter. Par conséquent, au lieu d’une simple demande d’URL (get), vous devez poster un formulaire pour vous déconnecter.

Dans votre fichier main.blade.php, remplacez la ligne suivante: 

{{ Auth::check() ? "Logged In" : "Logged Out"}}

avec l'exemple suivant, s'il vous plaît changer comme il convient pour votre besoin - c'est juste exemple où mettre ces codes. 

 @if (Auth::guest())
                    <a href="{{ route('login') }}">Login</a>
                @else

                                <a href="{{ route('logout') }}"
                                    onclick="event.preventDefault();
                                             document.getElementById('logout-form').submit();">
                                    Logout
                                </a>

                                <form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
                                    {{ csrf_field() }}
                                </form>

                @endif
14
Hasan Tareque