Laravel — популярный фреймворк в мире PHP, предлагающий разработчикам отличные инструменты для упрощения их работы. Однако иногда эти удобства могут привести к неожиданным проблемам. В этом посте я расскажу, как промежуточное программное обеспечение TrimStrings в Laravel может вызывать проблемы и как их решить.
Промежуточное программное обеспечение TrimStrings используется в приложениях Laravel для автоматического удаления пробелов из входящих данных запроса, таких как входные данные формы. Это особенно полезно, когда пользователи случайно оставляют пробелы в начале или конце полей ввода. Например, если пользователь вводит «[email protected]» с пробелами вокруг адреса электронной почты в форме, промежуточное программное обеспечение TrimStrings обрезает эти пробелы, гарантируя, что обрабатывается только «[email protected]». .
Эта функция полезна для предотвращения ошибок, вызванных ненужными пробелами, и для обработки более чистых данных. Однако, как всегда, в некоторых особых случаях такое поведение по умолчанию может привести к непредвиденным последствиям.
В проекте, в котором мы интегрировались с бразильским поставщиком платежей, нам нужно было собирать и проверять результаты платежей через систему обратного вызова. Поставщик платежей отправляет результат транзакции на наш сервер через POST-запрос, и мы проверяем запрос, выполняя проверку подписи/хеша.
Этот процесс проверки следует простой логике:
Поначалу было трудно понять, почему некоторые действительные запросы отклоняются. Однако после проверки логов Nginx мы заметили, что параметр full_name во входящем запросе сохраняет конечные пробелы. Несмотря на это, на нашем сервере эти пробелы были обрезаны, что привело к сбою проверки хеша. Именно тогда мы поняли, что причиной этой проблемы является промежуточное программное обеспечение TrimStrings.
Чтобы избежать таких проблем, необходимо отключить промежуточное программное обеспечение TrimStrings для определенных маршрутов или запросов. В Laravel 8 появился метод TrimStrings::skipWhen, который обеспечивает индивидуальное решение для этой ситуации.
Ниже приведен пример применения этого решения с использованием поставщика:
use Illuminate\Foundation\Http\Middleware\TrimStrings; use Illuminate\Http\Request; // ... TrimStrings::skipWhen(function (Request $request) { return $request->is('api/v1/integrations/foo-provider/callback'); });
Этот фрагмент кода отключает промежуточное программное обеспечение TrimStrings для определенного маршрута. В этом случае обрезка не будет выполняться для запросов, поступающих по маршруту api/v1/integrations/foo-provider/callback, что гарантирует бесперебойную работу процесса проверки хеша.
Функции Laravel по умолчанию обычно упрощают задачу, но в определенных сценариях они могут привести к неожиданным результатам. Поэтому важно понимать, как работают инструменты, которые мы используем, и тщательно оценивать их потенциальное воздействие. Хотя промежуточное программное обеспечение TrimStrings в большинстве случаев является полезным инструментом, в подобных сценариях оно может вызвать проблемы. К счастью, такие гибкие решения, как TrimStrings::skipWhen позволяют нам избежать подобных проблем.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3