Laravel é um framework popular no mundo PHP, oferecendo aos desenvolvedores ótimas ferramentas para simplificar seu trabalho. No entanto, por vezes estas conveniências podem levar a problemas inesperados. Neste post, discutirei como o middleware TrimStrings no Laravel pode causar problemas e como resolvê-los.
O middleware TrimStrings é usado em aplicativos Laravel para cortar automaticamente espaços em branco de dados de solicitação recebidos, como entradas de formulário. Isto é particularmente útil quando os usuários deixam acidentalmente espaços no início ou no final dos campos de entrada. Por exemplo, se um usuário inserir " [email protected] " com espaços ao redor do endereço de e-mail em um formulário, o middleware TrimStrings cortará esses espaços, garantindo que apenas "[email protected]" seja processado .
Esse recurso é benéfico para evitar erros causados por espaços em branco desnecessários e para lidar com dados mais limpos. No entanto, como sempre, em certos casos especiais, este comportamento padrão pode levar a consequências indesejadas.
Em um projeto em que estávamos nos integrando com um provedor de pagamentos baseado no Brasil, precisávamos capturar e validar os resultados do pagamento por meio de um sistema de retorno de chamada. O provedor de pagamento envia o resultado da transação ao nosso servidor por meio de uma solicitação POST, e nós validamos a solicitação realizando uma verificação de assinatura/hash.
Este processo de verificação segue uma lógica simples:
Inicialmente, foi difícil entender por que algumas solicitações válidas estavam sendo rejeitadas. No entanto, depois de inspecionar os logs do Nginx, percebemos que o parâmetro full_name na solicitação recebida mantinha espaços à direita. Apesar disso, em nosso servidor, esses espaços foram cortados, causando falha na verificação do hash. Foi quando percebemos que o middleware TrimStrings estava causando esse problema.
Para evitar tais problemas, é necessário desabilitar o middleware TrimStrings para rotas ou solicitações específicas. Laravel 8 introduziu o método TrimStrings::skipWhen, que fornece uma solução personalizada para esta situação.
Abaixo está um exemplo de como aplicar esta solução usando um provedor:
use Illuminate\Foundation\Http\Middleware\TrimStrings; use Illuminate\Http\Request; // ... TrimStrings::skipWhen(function (Request $request) { return $request->is('api/v1/integrations/foo-provider/callback'); });
Este trecho de código desativa o middleware TrimStrings para uma rota específica. Nesse caso, o corte não ocorrerá para solicitações provenientes da rota api/v1/integrations/foo-provider/callback, garantindo que o processo de verificação de hash funcione sem problemas.
Os recursos padrão do Laravel geralmente facilitam as coisas, mas em certos cenários, eles podem levar a resultados inesperados. Portanto, é importante compreender como funcionam as ferramentas que utilizamos e avaliar cuidadosamente seus potenciais impactos. Embora o middleware TrimStrings seja uma ferramenta útil na maioria dos casos, ele pode causar problemas em cenários como este. Felizmente, soluções flexíveis como TrimStrings::skipWhen nos permitem evitar tais problemas.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3