如何在 Laravel 中使用 GET 请求注销

Posted

技术标签:

【中文标题】如何在 Laravel 中使用 GET 请求注销【英文标题】:How to logout with a GET request in Laravel 【发布时间】: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 身份验证路由? 【参考方案1】:

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

知道您的问题是什么,您可能会找到这个 *** 答案,它应该可以帮助您以适合您的方式解决问题: 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

【讨论】:

以上是关于如何在 Laravel 中使用 GET 请求注销的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 5.x 中注销过期会话?

为啥 Laravel 默认通过 POST 注销(而不是 GET)? [复制]

Laravel 间歇性注销

Laravel 5 - 从他的所有设备中注销用户

Laravel API 验证/保护后续请求:没有登录/注销和没有“用户”表

Laravel 4 身份验证注销错误