If you added API prefix routing and want to disable Csrf Protection for POST, PUT API requests then follow the below listed steps.
First add API prefix routing into config/routes.php
$routes->prefix('api', function (RouteBuilder $routes): void { $routes->setExtensions(['json', 'xml']) $routes->connect('/token', ['controller' => 'Users', 'action' => 'token'] )->setMethods(['POST']); $routes->resources('Users'); $routes->resources('Pages'); });
Now update src/Application.php
.
public function middleware(MiddlewareQueue $middlewareQueue): MiddlewareQueue { $csrf = new CsrfProtectionMiddleware(['httponly' => true]); // Disable CSRF for API // Token check will be skipped when callback returns `true`. $csrf->skipCheckCallback(function ($request) { // Skip token check for API URLs. if ($request->getParam('prefix') === 'Api') { return true; } }); . . . . ->add($csrf); return $middlewareQueue; }
I tried above code and it is working.