Промежуточное пояснение 'auth' - PullRequest
1 голос
/ 13 апреля 2019

Я использую Laravel 5.8, и я получил следующую ситуацию:

У меня есть простая форма с кнопкой, которая отправляет запрос на удаление на маршрут. Форма работает так: когда кнопка нажата, действие формы перенаправляет меня на URL localhost / delete / 4, где 4 - это идентификатор записи в базе данных, и там начинается маршрут, и контроллер удаляет мою запись.

Однако неаутентифицированные пользователи не имеют доступа к кнопке формы, и маршрут защищен промежуточным программным обеспечением «auth». Но если я, как пользователь, не прошедший проверку подлинности, ввожу в адресной строке localhost / delete / 4, я получаю ошибку неподдерживаемого метода, которая ожидается, потому что я отправляю запрос get на маршрут типа удаления.

Но мой вопрос: почему я вообще получаю эту ошибку? Поскольку маршрут защищен промежуточным программным обеспечением от неаутентифицированных пользователей, почему запрос достигает маршрута, так как он должен быть заблокирован промежуточным программным обеспечением?

Ниже вы получили маршрут:

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

О, как примечание: если изменить маршрут для получения запросов и повторить попытку, промежуточное ПО работает нормально

1 Ответ

0 голосов
/ 13 апреля 2019

Сначала проверяется маршрут перед переходом к промежуточному программному обеспечению и контроллеру ... Так что, если маршрут не был найден, скрипт не знает, на какое промежуточное ПО или контроллер перейти ...

-

Вот хороший пример использования, например, кто-то хочет определить следующие маршруты

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

GET /question/1 является общедоступным для всех пользователей и возвращает сам вопрос (только для чтения)

но

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

PATCH /question/1 только аутентифицированный пользователь может редактировать вопрос ...

Так что допустимо, чтобы разные методы могли иметь разные промежуточные программы или не иметь промежуточных программ для одного и того же маршрута ... И что некоторые методы не определены / разрешены

-

Метод не поддерживается, поскольку ваш определенный маршрут предназначен только для удалений, как в ::delete методе, который вы использовали

Запрос на удаление - это либо запрос HTTP POST с запросом "_method" и значением "delete", либо в поддерживаемом браузере запрос 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, если пользователь достигает URL, который определен, но с методом, который не определен в маршрутах, вы получаете этот «Метод не поддерживается»

Ошибка неподдерживаемого метода не имеет отношения к авторизации промежуточного программного обеспечения в этом случае ... речь идет только о маршрутизации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...