如何禁用插件的 CSRF?

How to disable CSRF for a plugin?

我开发了一个 CakePHP 3 插件,它必须处理 POST 没有 CSRF 令牌的请求。

在我使用插件的应用程序中,我将中间件应用于根范围。

Router::scope('/', function (RouteBuilder $routes) {
    $routes->registerMiddleware('csrf', new CsrfProtectionMiddleware([
        'httpOnly' => true
    ]));

    $routes->applyMiddleware('csrf');
...

如何禁用插件的中间件?

我试过 $this->addPlugin(\My\Plugin::class, ['middleware' => false]) 但没用。

或者插件负责禁用 CSRF 中间件?

您可以试试下面的代码:

// In Application::bootstrap()
use ContactManager\Plugin as ContactManagerPlugin;

// Use the disable/enable to configure hooks.
$plugin = new ContactManagerPlugin();

$plugin->disable('middleware');
$this->addPlugin($plugin);

问题是我忘记加载 Application::bootstrap() 中的插件路由。

$this->addPlugin(\My\Plugin::class, ['routes' => true]);

根据 cake book 路由,bootstrap,中间件和控制台挂钩默认情况下被禁用。