• 10-04-2025, 17:50:07
    #1
    Merhaba hocalarım, bir siteme reCAPTCHA v2 Ben Robot Değilim doğrulaması ekledim.

    Arayüz:

    <script src="https://www.google.com/recaptcha/api.js" async defer></script>
    
    
    <div class="form-login">
    <div class="col-xs-12 m-t-5">
    <div class="g-recaptcha" data-sitekey="6LxxxxxxxxxxxxxxxxxxxH213edaı2312Rh"></div>
    </div>
    </div>

    Arkaplan:

    // reCAPTCHA Token Kontrolü
    $recaptchaResponse = $_POST['recaptcha_response'] ?? '';
    if (empty($recaptchaResponse)) {
    //http_response_code(400); // Bad Request
    echo json_encode(['success' => false, 'message' => 'reCAPTCHA doğrulaması başarısız.']);
    exit;
    }
    
    // Google reCAPTCHA API doğrulaması
    $recaptchaSecretKey = '6Lxxxxxxxxxxxxxxgqw123dsaa213daL';
    $recaptchaApiUrl = 'https://www.google.com/recaptcha/api/siteverify';
    
    $response = file_get_contents($recaptchaApiUrl . '?secret=' . $recaptchaSecretKey . '&response=' . $recaptchaResponse);
    $responseKeys = json_decode($response, true);
    
    if (empty($responseKeys['success']) || !$responseKeys['success'] || ($responseKeys['success'] && isset($responseKeys['score']) && $responseKeys['score'] < 0.5)) {
    //http_response_code(403); // Forbidden
    $message = isset($responseKeys['error-codes']) ? implode(', ', $responseKeys['error-codes']) : 'reCAPTCHA doğrulaması başarısız. Lütfen tekrar deneyin.';
    echo json_encode(['success' => false, 'message' => $message]);
    exit;
    }

    Şimdi sorum şu kullanıcı bir istek attığında eğer ki mail adresi, şifre vs yanlışsa onun hatası döndürüyorum ve kullanıcı 2. defa istek attığında "{success: false, message: "timeout-or-duplicate"} " hatası geliyor. İnternete baktım 2dk içerisinde aynı google doğrulama isteği gittiği için oluyormuş ama çözümü için tam işe yarar bir şey göremedim. Sitesine google doğrulaması ekleyen hocalarım rica etsem kodlarımı inceleyeleyip bilgi hatam hakkında bilgi verebilir misiniz?
  • 11-04-2025, 14:07:53
    #2
    merhaba,

    daha önce bir projem de timeout değil ama birden fazla doğrulama işlevi kullanmam gereken bir sayfa da sorun olmuştu. her seferinde butonu yenilemesi için grecaptcha.reset(); komutunu kullanıyordum. sayfa yenilemesine veya hata mesajları içerisine reset komutunu ekleyip deneyebilirsiniz.