这是我拥有的
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);
});
});我在做什么
使用/api/users向邮递员发出POST请求。请求通过后,我看到了正确的反应。我想确保我已经为站点的其他部分启用了保护,所以我期待那些丢失的CSRF令牌cookie错误之一。一旦确认,我将取消对API路由异常的评论。
我试过的
registerMiddleware()调用放入src/Application.phpapplyMiddleware()电话中加入一些胡言乱语。它抱怨无法找到中间件,这证实了函数确实被调用了。$this->loadComponent('Csrf');放入AppController.php。它起作用了,我得到了丢失的CSRF令牌曲奇。它没有向我展示关于冲突组件的警告,比如此页说它应该我的印象是中间件没有被正确地启用,但是对我来说不清楚到底是什么错了。请协助
发布于 2019-04-04 12:05:45
事实证明这是正确的设置。
我没有意识到没有中间件的较低的Router::prefix调用会否定上面的Router::scope调用(即充当一个例外),但它做到了。
https://stackoverflow.com/questions/55515336
复制相似问题