Laravel, PHP dünyasında popüler bir framework ve bir çok geliştiriciye kolaylık sağlamak için harika araçlar sunuyor. Ancak bazen, bu kolaylıklar beklenmedik sorunlara da yol açabiliyor. Bu yazıda, Laravel’deki TrimStrings middleware’inin nasıl bir problem yaratabileceğinden ve bunu nasıl çözebileceğimizden bahsedeceğim.
TrimStrings Middleware Nedir ve Ne İşe Yarar?
TrimStrings middleware’i, Laravel uygulamalarında form verileri gibi kullanıcıdan gelen isteklerdeki boşlukları otomatik olarak temizlemek için kullanılır. Bu, özellikle form inputlarında kullanıcıların yanlışlıkla başında veya sonunda boşluk bıraktığı durumlarda faydalıdır. Örneğin, bir kullanıcı formda e-posta adresini girerken " [email protected] " gibi başında veya sonunda boşluk bırakabilir. TrimStrings middleware’i bu tür boşlukları kırpar ve sadece "[email protected]" değerini alır.
Bu özellik, gereksiz boşluklardan kaynaklanan hataları önlemek ve daha temiz veri işlemek için oldukça yararlıdır. Ancak, her zaman olduğu gibi, bazı özel durumlarda bu varsayılan davranış istenmeyen sonuçlara yol açabilir.
Olay Nasıl Gelişti?
Brezilya merkezli bir ödeme sağlayıcı ile entegre çalıştığımız bir projede, ödeme sonuçlarını almak ve doğrulamak için bir callback yapısı kullanıyoruz. Ödeme sağlayıcısı, işlem sonucunu bir POST isteği ile sunucumuza gönderiyor ve biz de bu isteğin doğruluğunu kontrol etmek için bir signature/hash doğrulaması yapıyoruz.
Bu doğrulama işlemi oldukça basit bir mantığa dayanıyor:
- Sağlayıcıdan gelen veriler alınıyor.
- Tüm veriler bir string olarak birleştiriliyor.
- Bu string, sağlayıcının bize verdiği secret key ile SHA256 algoritması kullanılarak hash’leniyor.
- Bu hash, sağlayıcıdan gelen hash ile karşılaştırılıyor. Eğer aynı ise işlem başarılı sayılıyor, değilse başarısız.
Problemi Nasıl Fark Edildi?
Başlangıçta, gelen bazı valid isteklerin neden reddedildiğini anlamak zor oldu. Ancak, Nginx loglarını incelediğimizde, gelen istekteki full_name parametresinde sondaki boşlukların korunarak gönderildiğini fark ettik. Buna rağmen, bizim sunucumuzda bu boşluklar kırpılmıştı ve bu durum hash doğrulamasında hataya yol açıyordu. İşte o an, TrimStrings middleware’inin bu soruna neden olduğu anlaşıldı.
Çözüm Ne?
Bu tür durumlarla karşılaşmamak için, belirli rotalar veya istekler için TrimStrings middleware’ini devre dışı bırakmak gerekiyor. Laravel 8 ile birlikte sunulan TrimStrings::skipWhen metodu, bu duruma özel bir çözüm sunuyor.
Aşağıda bir provider aracılığıyla bu çözümün nasıl uygulanabileceğini görebilirsiniz:
use Illuminate\Foundation\Http\Middleware\TrimStrings;
use Illuminate\Http\Request;
// ...
TrimStrings::skipWhen(function (Request $request) {
return $request->is('api/v1/integrations/foo-provider/callback');
});
Bu kod parçası, belirli bir rota için TrimStrings middleware’ini devre dışı bırakıyor. Yani api/v1/integrations/foo-provider/callback
rotasından gelen istekler için boşluk kırpılması işlemi yapılmıyor ve böylece hash doğrulama işlemi sorunsuz bir şekilde gerçekleştiriliyor.
Sonuç
Laravel’in sunduğu varsayılan özellikler genellikle işleri kolaylaştırırken, belirli senaryolarda beklenmedik sonuçlar doğurabiliyor. Bu yüzden, proje geliştirme sürecinde kullanılan araçların işleyişine dikkat etmek ve potansiyel etkilerini iyi değerlendirmek çok önemli. TrimStrings middleware’i, çoğu durumda yararlı bir araç olmasına rağmen, bu gibi senaryolarda başınıza bela olabilir. Neyse ki, TrimStrings::skipWhen gibi esnek çözümlerle bu tür sorunların önüne geçmek mümkün.