当我尝试从管理面板注销时出现错误:
MethodNotAllowedHttpException in RouteCollection.php line 218:
但是在路由中有路由logout
:
POST | logout | App\Http\Controllers\Auth\LoginController@logout | web
我怎样才能解决这个问题?
如果您已升级到Laravel 5.3,则在升级过程中有意删除了get注销路由。
POST登出
Auth :: routes方法现在为/ logout注册了POST路由,而不是GET路由。 这样可以防止其他Web应用程序将您的用户注销。 要进行升级,您应该将注销请求转换为使用POST动词,或者为/ logout URI注册自己的GET路由
https://laravel.com/docs/5.3/upgrade
您需要将所有注销链接更改为表单,以便它可以发布到路由。 从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.-如果您正在使用由您创建的登录类,请在config / auth.php中指定它:
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Administrator::class,
],
],
2.-您的模型必须继承自Authenticateable类:
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()
进行身份Auth::check()
附加信息:在处理POST请求时,Laravel需要验证该请求不是恶意请求,因为此Laravel需要加密的代码,称为csrf_token ,如果不发送,则默认情况下所有请求将不会被允许。
是您在Auth文件夹或Controllers文件夹中的LoginController。.也许您输入的路径是错误的..如果LoginController在Controllers文件夹中,则路径应为Route :: get('logout','App \\ Http \\ Controllers \\ LoginController @登出');
您正在尝试使用GET
访问POST
路由。
你可以:
-使用POST
创建ajax请求
-将按钮包装在POST
表单中
-创建一个额外的GET
-route到App\\Http\\Controllers\\Auth\\LoginController@logout
您正在对POST
路由执行GET
请求。 创建或修改现有路由以接受GET
请求(大多数情况下,通过链接进行的重定向是GET
请求)
更换
<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中,它将解决。
只需将其添加到路由文件即可:
Route::get('/logout' , 'Auth\LoginController@logout');