当我尝试从管理面板注销时,我收到错误:
MethodNotAllowedHttpException in RouteCollection.php line 218:
但在路由中有路由logout
:
POST | logout | App\Http\Controllers\Auth\LoginController@logout | web
我该如何解决这个问题?
答案 0 :(得分:4)
如果您已升级到Laravel 5.3,则在升级过程中会有目的地删除get logout路由。
POST退出
Auth :: routes方法现在为/ logout而不是GET路由注册POST路由。这可以防止其他Web应用程序将您的用户从您的应用程序中删除。要升级,您应该将您的注销请求转换为使用POST动词或为/ logout URI注册您自己的GET路由
https://laravel.com/docs/5.3/upgrade
您需要将所有注销链接更改为表单,以便它可以POST到路由。来自https://github.com/acacha/adminlte-laravel/issues/94,类似于:
<a href="{{ url('/logout') }}" onclick="event.preventDefault(); document.getElementById('logout-form').submit();"> Logout </a>
<form id="logout-form" action="{{ url('/logout') }}" method="POST" style="display: none;">{{ csrf_field() }} </form>
答案 1 :(得分:3)
您需要执行以下步骤:
1.-如果您正在使用由您创建的类登录,请在config / auth.php中指定:
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Administrator::class,
],
],
2.-您的模型必须继承自 Authenticatable :
use Illuminate\Foundation\Auth\User as Authenticatable;
class Administrator extends Authenticatable{
#code...
}
3.-在LoginController上添加logout()函数,导入 Auth 和 Redirect 类
public function logout(){
Auth::logout();
return Redirect::to('admin');
}
3.-指定您将用于通过GET注销的路线
Route::get('logout','LoginController@logout');
这就是全部,这应该有用。
注意:检查您是否通过函数Auth::check()
其他信息:当您处理POST请求时,Laravel需要验证请求不是恶意请求,因为此Laravel需要一个ecrypted代码,这称为 csrf_token < / strong>,如果您不发送此消息,则默认情况下不会允许您的所有请求。
答案 2 :(得分:1)
是Auth文件夹或Controllers文件夹中的LoginController。 也许你正在给出错误的道路...... 如果LoginController在Controllers文件夹中,则Path应为 路由:: get(&#39;退出&#39;,&#39; App \ Http \ Controllers \ LoginController @ logout&#39;);
答案 3 :(得分:0)
您尝试使用POST
访问GET
路线。
你可以:
- 使用POST
创建ajax请求
- 以POST
- 形式包裹按钮
- 创建一个额外的GET
- 路由到App\Http\Controllers\Auth\LoginController@logout
答案 4 :(得分:0)
您正在对ss
路由发出GET
个请求。创建或修改现有路由以接受POST
请求(通过链接重定向是GET
请求(大多数时间))
答案 5 :(得分:0)
替换
<a href="{{ url('/logout') }}" class="btn btn-default btn-flat">{{ trans('adminlte_lang::message.signout') }}</a>
与
<a href="{{ url('/logout') }}" class="btn btn-default btn-flat" onclick="event.preventDefault(); document.getElementById('logout-form').submit();"> {{ trans('adminlte_lang::message.signout') }} </a>
<form id="logout-form" action="{{ url('/logout') }}" method="POST" style="display: none;">{{ csrf_field() }} </form>
在mainheader.blade.php中,它将修复。
答案 6 :(得分:0)
只需将其添加到路由文件中即可
grant connect to readwrite