【问题标题】:Logout error Laravel注销错误 Laravel
【发布时间】:2018-07-03 05:16:34
【问题描述】:

当我尝试去http://mysite/logout时,我得到了

Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException
没有消息

路线:

Auth::routes();

php artisan route:list的一部分

+-----------+-------------------------+---------------------+------------------------------------------------------------------------+--------------+
| Method    | URI                     | Name                | Action                                                                 | Middleware   |
+-----------+-------------------------+---------------------+------------------------------------------------------------------------+--------------+
| POST      | logout                  | logout              | App\Http\Controllers\Auth\LoginController@logout                       | web          |

当我使用这个默认按钮时

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

一切正常。


编辑:添加了我自己的答案。

【问题讨论】:

  • 你需要发出post请求,这里你正在发出get请求
  • @Sohel0415 我可以禁止某些路线的 GET 吗?
  • 是的,你在路由文件中指定了这个

标签: php laravel-5.5


【解决方案1】:
<form action="{{ route('logout') }}" method="post">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
    <button type="submit" class="btn btn-danger">logout from account</button>
</form>

标准代码,为我工作。

【讨论】:

    【解决方案2】:

    在web.php中,添加注销路由,

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

    为我工作。

    【讨论】:

      【解决方案3】:

      解决方法,将表单中href标签的“/logout”改为“#”。

      onClick 事件重定向到“/logout”并在表单中使用 POST METHOD。

      Laravel 5.8.

      【讨论】:

        【解决方案4】:
        Route::get('logout', 'Auth\LoginController@logout', function () {
            return abort(404);
        });
        

        这对我有用。

        【讨论】:

          【解决方案5】:

          您定义的路由方法与您访问它的方式不同。

          根据您访问它的方式更改它。您的路线需要定义为POST,因为您使用POST 方法提交表单。

          【讨论】:

          • 我的路线是POST。但是,如果我尝试以 URL 的形式访问它,则它是 GET。我必须重定向?
          【解决方案6】:

          默认情况下,Auth::routes() 使用Illuminate\Routing\Router@auth 中的路由,/logout 使用POST 请求。如果您想使用GET 请求,您可能会遇到一些意外注销。但是,如果您坚持,您可以在您的路线上添加这样的内容:

          <?php 
          ...
          Route::get('logout', 'Auth\LoginController@logout');
          ...
          

          【讨论】:

          • 对于logout,我只需要POST。我做了Auth::routes(); Route::post('logout', 'Auth\LoginController@logout')-&gt;name('logout');,但没有帮助。
          • 无需写Route::post('logout', 'Auth\LoginController@logout')-&gt;name('logout');,因为Auth::routes(); 为您制作。
          • 那么Auth::routes() 就好了。只是不要尝试通过 URL 访问/logout
          • 但是如果某个用户去/logout,他可能会看到404,而不是当前错误,对吧?所以也许我需要将logoutGET 重定向到404
          • 是的,您可能想查看我为您创建的要点。 gist.github.com/jayaregalinada/349b6088e46fc7ea08b0b5bf65ab5469
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-06
          • 2017-10-23
          • 2014-07-19
          • 2021-08-19
          • 2017-05-18
          • 1970-01-01
          相关资源
          最近更新 更多