如何解决Laravel中的注销问题?

时间:2019-10-10 06:29:38

标签: laravel eloquent routes laravel-5.8 laravel-6

我注销时遇到错误,它向我显示此错误...“此路由不支持GET方法。受支持的方法:POST。  ” 请帮助我解决这个问题。

这是我的代码...

@if(Auth::check())
  <li><i class="fa fa-user"></i> {{Auth::user()->name}}:
    <a href="{{url('logout')}}">logout</a>
  </li>
@else
  <li>
    <a href="{{route('login')}}"><i class="fa fa-user"></i>Login</a>
  </li>
@endif

5 个答案:

答案 0 :(得分:1)

您只需在web.php路由文件中添加以下行:

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

这使您可以使用GET请求注销。

答案 1 :(得分:0)

您正在使用链接的href属性来调用相应的URL-但是,这些链接始终使用GET HTTP调用来打开/调用相应的目标。如错误消息所述,您正在呼叫的目标正在等待POST HTTP呼叫。

了解您的问题所在后,您可能会找到此StackOverflow答案,该答案应该可以帮助您以适合自己的方式解决该问题: Making href anchor tag request post instead of get

答案 2 :(得分:0)

GET方法不支持注销。 Laravel 5.4+使用post方法注销,因此,您应该发布一个表单来注销,而不是简单的GET请求。

例如:

<form id="logout-form" action="{{ url('logout') }}" method="POST">
            {{ csrf_field() }}
    <button type="submit">Logout</button>
</form>

更改代码:

@if(Auth::check())
<li><i class="fa fa-user"></i> {{Auth::user()->name}}:</li>
        <form id="logout-form" action="{{ url('logout') }}" method="POST">
                    {{ csrf_field() }}
            <button type="submit">Logout</button>
        </form>
      @else
    <li><a href="{{route('login')}}"><i class="fa fa-user"></i>
            Login
        </a>
    </li>
@endif

答案 3 :(得分:0)

使用

<a href="{{ route('logout') }}">Logout</a>

和在路由文件中

Route::get('logout', function ()
{
    auth()->logout();
    Session()->flush();

    return Redirect::to('/');
})->name('logout');

答案 4 :(得分:0)

@if(Auth::check())
  <li><i class="fa fa-user"></i> {{Auth::user()->name}}:
    <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>
  </li>
@else
  <li>
    <a href="{{route('login')}}"><i class="fa fa-user"></i>Login</a>
  </li>
@endif