当我尝试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>
一切都很好。
编辑:我自己的答案补充道。
答案 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
。