【发布时间】:2019-04-13 15:54:22
【问题描述】:
我正在使用 Laravel 5.8,我遇到了以下情况:
我有一个带有按钮的简单表单,它向路由发送删除请求。表单的工作方式如下:按下按钮时,表单的操作会将我重定向到 URL localhost/delete/4,其中 4 是数据库中条目的 id,然后路由启动,控制器删除我的条目。
但是,未经身份验证的用户无权访问表单的按钮,并且路由受中间件“身份验证”保护。 但是,如果我作为未经身份验证的用户在地址栏输入 localhost/delete/4,我会收到一个方法不受支持的错误,这是预期的,因为我向删除类型的路由发送了一个 get 请求。
但我的问题是为什么我会收到这个错误?既然路由受到中间件的保护,防止未经身份验证的用户,为什么请求会到达路由,因为它应该被中间件阻止?
下面你得到了路线:
Route::delete('/delete/{id}', ['uses' => 'LibraryController@getLibraryDelete', 'middleware' => 'auth']);
哦,顺便说一句,如果更改接收 get 请求的路由,然后重试,中间件可以正常工作
【问题讨论】:
-
您定义的路由的
delete版本受中间件保护。您未定义的get版本不存在,因此无法保护。所以你得到了MethodNotSupported错误。 -
@TimLewis 但是,由于获取版本不存在并且删除版本受到保护并且请求无法到达,我不应该收到“路线不存在”错误吗?
-
呃,我只是在控制器的构造中
$this->middleware('auth')->except(); -
嗯,不,路线确实存在,只是方法
GET不被支持......也许是奇怪的措辞,但这只是捕获的优先级;你会得到一个NotSupported,然后是一个404,然后是中间件。