Google bize recaptcha v2 den sonra bu yeni sürümü ile birlikte checkbox üzerine tik atma derdinden kurtarıp, kullanıcı puanlama sistemine geçmiş, spam yapmayan sevdiği kullanıcılarına erişim sağlarken hiç uğraştırmadan direkt formlarınızı gönderme imkanı sağlıyor :) daha detaylı bilgi için kendi dökümantasyonuna göz atabilirsiniz. Şimdi google recaptcha v3'ü Laravel ile birlikte nasıl kullanacağımıza bakalım.


Yapacağımız işlemler:

  • İşimizi kolaylaştırması ve sadeleştirmesi için oluşturacağımız custom validation (recaptcha için)
  • Formu göndereceğimiz controller içerisinde kontrol etmek. (validation ile)
  • View içerisine google recaptcha kullanmamız için gerekli script taglerini eklemek.
  • Form içerisinde kontrol edilecek verinin input etiketinin işlenmesi.



Şimdi Laravel üzerinde bunu kolayca nasıl kullanırız ona bakalım. Öncelikle bu sorgu işlemimin basit ve sade olması için app/Providers/AppServiceProvider.php içerisinde bir custom validation tanımlayacağım.


Validator::extend('recaptcha', function ($attribute, $value, $parameters, $validator) {
            $recaptcha3url =  'https://www.google.com/recaptcha/api/siteverify?secret=' . urlencode('6LeSyMUU11111M3q7kP9UKOHQ11111118NpQQB33') .  '&response=' . urlencode($value);

            $response = file_get_contents($recaptcha3url);
            $responseKeys = json_decode($response, true);


            if($responseKeys["success"]) {
                return true;
            } else {
                return false;
            }
        });

Buraya yazacağım key secret-key olmalı. Burada recaptcha adında bir validator oluşturdum, şimdi bunu controller üzerinde form göndereceğimiz bölümde kullanacağız. Üst taraftaki kodda google'ın bize sağlamış olduğu secretkeyi yazıyoruz. Bunu karşılaştırma için yapacağız. Bu validatorden true ya da false değerini döndürüyoruz. Eğer google bize başarılı istek diyorsa, biz de işlemimize devam edeceğiz. Şimdi gelelim controller'a


// HomeController.php

  $validatedData = $request->validate([
          'name' => 'required',
          'surname' => 'required',
          'g-recaptcha-response' => ['required', 'recaptcha']
  ]);

Gördüğünüz gibi g-recaptcha-response adında gelecek olan bir verimize 'recaptcha' kuralını tanımlamış olduk, az önce bunu appServiceProvider'da tanımlamıştık. g-recaptcha-response ise google recaptchayı işleyeceğimiz input.


Şimdi view tarafına gelip google script taglerini ve form içerisindeki gerekli inputumuzu yerleştirelim. View tarafına aşağıdaki kodları ekleyelim. Google'ın bize vermiş olduğu public-key i viewda çağırdığımız scripte yazıyoruz. (Ben örnek olsun diye rastgele bir public key yerleştirdim.)

// view.blade.php

<script src="https://www.google.com/recaptcha/api.js?render=6LeSyMUUBBBBBGueAj3fbGtWuPR3vbWF11111111"></script>
    <script>
        grecaptcha.ready(function () {
            grecaptcha.execute('6LeSyMUUBBBBBGueAj3fbGtWuPR3vbWF11111111', {action: 'validate_captcha'}).then(function (token) {
                $('#g-recaptcha-response').val(token);
            });
        });
    </script>

Son olarak <form> içerisine inputu yerleştirdikten sonra işlemimiz tamamlanıyor.


<form ...>
    <input type="hidden" id="g-recaptcha-response" name="g-recaptcha-response">
</form>

Form içerisinde gizli inputumuzu ekledikten sonra işlemimiz tamamlanmış oluyor. Bu kadar !


Umarım faydalı olmuştur, iyi çalışmalar 😊