В моем проекте я использую Laravel исключительно как бэкэнд API, а весь интерфейс обрабатывается Angular javascript. На данный момент к маршрутам Laravel можно получить прямой доступ, и он выкашливает все данные в формате Json, которые отображаются в браузере. Я хочу наложить на него ограничение, чтобы Laravel отвечал только на запросы Ajax и ничего больше.
Я прочитал этот пост здесь, в котором есть решение для Laravel 4, то есть добавление ограничения в filter.php
. Но начиная с Laravel 5.1 фильтры больше не используются, и я считаю, что промежуточное ПО можно использовать для того же. Однако я не уверен, как продолжить изменение решения Laravel 4 в этом ответе SO с фильтра на промежуточное ПО.
Может ли кто-нибудь поделиться своими идеями о том, как предотвратить прямой доступ к маршрутам Laravel 5.1, пожалуйста?
Решение Laravel 4 с использованием filter.php
: в filter.php
объявите этот фильтр:
Route::filter('isAJAX', function()
{
if (!Request::AJAX()) return Redirect::to('/')->with(array('route' => Request::path()));
});
Затем поместите все свои маршруты, которые вы хотите использовать только через AJAX, в группу. В ваших маршрутах.php:
Route::group(array('before' => 'isAJAX'), function()
{
Route::get('contacts/{name}', ContactController@index); // Or however you declared your route
... // More routes
});