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);
});
});
使用Postman向/api/users
发出POST请求。请求通过,我看到正确的响应。我想确保在网站的其余部分都启用了保护功能,因此我期待其中的缺少CSRF令牌cookie 错误之一。确认后,我将取消注释API路由异常。
registerMiddleware()
呼叫放入src/Application.php
applyMiddleware()
调用中添加一些乱码。它抱怨找不到该中间件,从而确认该函数确实被调用$this->loadComponent('Csrf');
放入AppController.php
中。它有效,我确实得到了缺少CSRF令牌cookie 。它没有向我显示有关组件冲突的警告 ,例如this page说我对中间件没有正确启用感到印象深刻,但是对我来说到底是什么错误并不明显。请协助
答案 0 :(得分:0)
结果证明这实际上是正确的设置。
我不知道没有中间件的较低的Router::prefix
调用会否定以上的Router::scope
调用(即作为例外),但是确实如此。