中间件“身份验证”的说明

时间:2019-04-13 15:54:22

标签: php laravel-5

我正在使用Laravel 5.8,但出现以下情况:

我有一个带有按钮的简单表单,该按钮向路径发送删除请求。表单的工作方式如下:按下按钮时,表单的操作会将我重定向到URL localhost / delete / 4,其中4是数据库中条目的ID,并且路由会插入,控制器会删除我的条目。

但是,未经身份验证的用户无法访问表单的按钮,并且路由受中间件“ auth”的保护。 但是,如果我以未经身份验证的用户身份在地址栏中输入localhost / delete / 4,则会收到方法不受支持的错误,这是预期的,因为我将get请求发送至删除类型的路由。

但是我的问题是为什么我完全会收到此错误?由于路由受中间件保护,以防止未经身份验证的用户访问,为什么请求到达路由,因为它应被中间件阻止?

下面有路线:

Route::delete('/delete/{id}', ['uses' => 'LibraryController@getLibraryDelete', 'middleware' => 'auth']);

哦,作为补充,如果更改接收get请求的路径,然后重试,则中间件可以正常工作

1 个答案:

答案 0 :(得分:0)

在转到中间件和控制器之前,先检查路由。 因此,如果未找到路由,则脚本实际上不知道要转到哪个中间件或控制器...

-

这是一个很好的用例,例如有人想要定义以下路线

Route :: get('/ question / {id}','QuestionController @ view');

GET /question/1对所有用户公开,并返回问题本身(只读)

但是

Route :: patch('/ question / {id}','QuestionController @ edit')->中间件('auth');

PATCH /question/1只有经过验证的用户才能编辑问题...

因此,对于相同的路由,不同的方法可以具有不同的中间件或没有中间件是可以接受的... 而且某些方法未定义/不允许

-

该方法不受支持,因为您定义的路由仅用于删除,就像您使用的::delete方法一样

删除请求是带有查询“ _method”和值“ delete”的HTTP POST请求,或者是在受支持的浏览器中的HTTP DELETE请求

当用户在地址栏中手动键入url时,这是一个GET请求,可以通过此路由方法:: get

处理

最新文档中可用的路由方法:(https://laravel.com/docs/5.8/routing

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

加上接受任何方法的特殊路线::any

在laravel中,如果用户访问的是已定义但未在路由中定义的方法的网址,则会显示此“方法不受支持”

在这种情况下,方法不受支持的错误与身份验证中间件无关……只是路由