Вот что у меня есть
Cakephp 3.7.2; по моему routes.php
:
<?php
use Cake\Core\Plugin;
use Cake\Routing\RouteBuilder;
use Cake\Routing\Router;
use Cake\Routing\Route\DashedRoute;
use Cake\Http\Middleware\CsrfProtectionMiddleware;
Router::defaultRouteClass(DashedRoute::class);
Router::scope('/', function (RouteBuilder $routes) {
$routes->registerMiddleware('csrf', new CsrfProtectionMiddleware());
$routes->applyMiddleware('csrf');
$routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']);
$routes->fallbacks(DashedRoute::class);
});
/*
Router::scope('/api', function ($routes) {
// connect routes with *no* CSRF protection as that middleware is not active
// for this routing scope.
});
*/
Router::prefix('api', function ($routes) {
$routes->prefix('users', function ($routes) {
$routes->fallbacks(DashedRoute::class);
});
});
Что я делаю
Сделайте POST-запрос к /api/users
, используя Почтальон . Запрос проходит, и я вижу правильный ответ. Я хочу убедиться, что у меня включена защита для остальной части сайта, поэтому я ожидаю одну из тех ошибок Missing CSRF cookie . После подтверждения я раскомментирую исключение маршрута API.
Что я пробовал
- Следуйте controllers / middleware.html # csrf-middleware и поместите вызов
registerMiddleware()
в src/Application.php
- Добавьте немного тарабарщины в
applyMiddleware()
вызов. Он жалуется, что не может найти то промежуточное ПО, которое подтверждает, что функция вызывается
- Поместите
$this->loadComponent('Csrf');
в AppController.php
. Это работает, и я получаю Missing CSRF cookie-токен . Это не показывает мне предупреждение о конфликтующих компонентах как эта страница говорит, что должно
У меня сложилось впечатление, что промежуточное программное обеспечение не было включено должным образом, но мне не очевидно, что именно не так. Пожалуйста, помогите