注销错误Laravel

时间:2018-01-24 08:21:08

标签: php laravel-5.5

当我尝试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>

一切都很好。

编辑:我自己的答案补充道。

5 个答案:

答案 0 :(得分:3)

Route::get('logout', 'Auth\LoginController@logout', function () {
    return abort(404);
});

这对我有用。

答案 1 :(得分:1)

解决方案,将表单中href标记的“ /注销”更改为“#”。

onClick事件重定向到“ /登出”并在表单中使用POST方法。

Laravel 5.8。

答案 2 :(得分: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>

标准代码,为我工作。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

按照您访问它的方式更改它。由于您使用POST方法提交表单,因此您的路线需要定义为POST