CorsControl.php 1.2 KB

123456789101112131415161718192021222324252627282930313233343536
  1. <?php
  2. namespace Middlewares;
  3. use Psr\Http\Message\ServerRequestInterface;
  4. use React\Http\Message\Response;
  5. class CorsControl
  6. {
  7. public function __invoke(ServerRequestInterface $request, callable $next)
  8. {
  9. // Cabeçalhos CORS liberais para todas as origens
  10. $corsHeaders = [
  11. 'Access-Control-Allow-Origin' => '*',
  12. 'Access-Control-Allow-Methods' => 'GET, POST',
  13. 'Access-Control-Allow-Headers' => 'Content-Type, Authorization, X-Requested-With, Accept, Origin',
  14. 'Access-Control-Allow-Credentials' => 'true',
  15. 'Access-Control-Max-Age' => '86400', // 24 horas em segundos
  16. ];
  17. // Responde imediatamente a preflight OPTIONS
  18. if ($request->getMethod() === 'OPTIONS') {
  19. return new Response(204, $corsHeaders);
  20. }
  21. // Executa o próximo middleware / controlador
  22. $response = $next($request);
  23. // Injeta os headers CORS na resposta
  24. foreach ($corsHeaders as $header => $value) {
  25. $response = $response->withHeader($header, $value);
  26. }
  27. return $response;
  28. }
  29. }