【发布时间】:2019-08-26 04:10:21
【问题描述】:
这就是我所拥有的
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 请求。请求通过,我看到了正确的响应。我想确保我为站点的其余部分启用了保护,所以我期待其中一个 Missing CSRF token cookie 错误。一旦确认,我将取消注释 API 路由异常。
我尝试过的
- 关注controllers/middleware.html#csrf-middleware 并将
registerMiddleware()呼叫转入src/Application.php - 在
applyMiddleware()调用中添加一些废话。它抱怨找不到该中间件,这证实了该函数确实被调用了 - 将
$this->loadComponent('Csrf');放入AppController.php。它有效,我确实得到了 Missing CSRF 令牌 cookie。它没有向我显示关于冲突组件的警告,如 this page 所说的应该
我的印象是中间件没有正确启用,但对我来说究竟出了什么问题并不明显。请帮忙
【问题讨论】:
-
我将能够在两天内接受答案并关闭问题。我决定把它留在这里供谷歌人使用。这对我来说并不明显,对其他人可能并不明显。
标签: cakephp cakephp-3.0