Wenn Sie eine Route von einer Middleware ausschließen müssen, gibt es zwei Möglichkeiten:
Option 1: Gruppe Ihre Routen.
können Sie Gruppe alle Routen mit Ausnahme der:
<?php
$app->group('', function() {
// All routes declarations....
})->add($container->csrf); // Add middleware to all routes within the group
// Declare your "exceptional" route outside the group
$app->post('my-special-route-that-has-no-csrf-middleware', 'routeProcessor');
Option 2: Ihre eigene Middleware
Statt \Slim\Csrf\Guard
mit direkt verwenden, nutzen Sie Ihre eigene Middleware, die es erweitert . Ihre Middleware überprüft die Route und wenn die Route "außergewöhnlich" ist, wird sie übersprungen.
dies Einstellungen hinzufügen, da Sie Route innerhalb Middleware zugreifen müssen:
<?php
class MyCsrfMiddleware extends Slim\Csrf\Guard
{
// This method is processing every request in your application
public function processRequest($request, $response, $next) {
// Check if it's your "exceptional" route
$route = $request->getAttribute('route');
if ($route == 'my-special-path') {
// If it is - just pass request-response to the next callable in chain
return $next($request, $response);
} else {
// else apply __invoke method that you've inherited from \Slim\Csrf\Guard
return $this($request, $response, $next);
}
}
}
/////////////
$container['csrf'] = function($container) {
return new MyCsrfMiddleware; // Now the container returns your middleware under 'csrf' key
};
Jetzt einfach die Middleware \Slim\App
Instanz hinzufügen:
$container['settings'] => [
'determineRouteBeforeAppMiddleware' => true
];
die Middleware erstreckt orginial \Slim\Csrf\Guard
erstellen
$app->add('csrf:processRequest');