【问题标题】:How to logout with a GET request in Laravel如何在 Laravel 中使用 GET 请求注销
【发布时间】:2020-02-07 12:48:56
【问题描述】:

我在注销时遇到错误,它向我显示此错误...“此路线不支持 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

【问题讨论】:

  • 请添加您的控制器代码和其他代码(例如 web.php、中间件)。除非你的问题很难解决。谢谢。
  • 您是否通过在路由文件中调用“Auth::routes()”来使用默认的 laravel 身份验证路由?

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


【解决方案1】:

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

知道您的问题是什么,您可能会找到这个 StackOverflow 答案,它应该可以帮助您以适合您的方式解决问题: Making href anchor tag request post instead of get

【讨论】:

    【解决方案2】:

    不支持注销的 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】:

      您可以在 web.php 路由文件中添加这一行:

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

      这允许您使用GET 请求注销。

      【讨论】:

        【解决方案4】:

        使用

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

        在路由文件中

        Route::get('logout', function ()
        {
            auth()->logout();
            Session()->flush();
        
            return Redirect::to('/');
        })->name('logout');
        

        【讨论】:

          【解决方案5】:
          @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
          

          【讨论】:

            猜你喜欢
            • 2019-10-12
            • 1970-01-01
            • 2020-08-12
            • 2017-07-06
            • 2018-08-25
            • 2020-08-14
            • 1970-01-01
            • 1970-01-01
            • 2015-07-01
            相关资源
            最近更新 更多