2017-03-16 9 views
2

私は、Googleが新しいInvisible reCaptchaをいくつかのウェブサイトに実装しようとしています。missing-input-response | Invisible reCaptcha

私はこのステップを正確に踏襲していますが、それは継続的に入力漏れエラーが発生します。

HTMLコード:

<form id="subscribe-form" class="form-inline" action="phpScripts/subscribe/subscribeHandler.php" method="post"> 
    <div class="input-group"> 
     <input type="email" name="email" class="form-control" size="50" placeholder="Email Address" required> 
     <div class="input-group-btn"> 
      <button class="g-recaptcha btn btn-danger" data-sitekey="6LfoNhkUAAAAAEcQFx8vGHZKHXsZ_q0j2KDnmU9M" data-callback="submitForm">Subscribe</button> 
     </div> 
    </div> 
</form> 

PHPコード:

<?php 
include 'databaseConnection.php'; 
if($_POST){ 
      $secret = "MY SECRET KEY"; 
      $captcha= $_POST['g-recaptcha-response']; 
      $ip = $_SERVER['REMOTE_ADDR']; 
      $url= file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=$secret&response=$captcha&remoteip=$ip"); 
      print_r($url); 
      $decodedResponse = json_decode($url, TRUE); 

      if($decodedResponse['success'] == 1){//code here} 

だから、私は$のキャプチャ変数はG-reCAPTCHAの応答のPOSTから "キャッチ" 何もできないことを考えています。しかし、なぜ、これはGoogleが正確に言い、正確に古いreCaptcha v2と同じです。

Aswellは、私はあなたがおそらくボタンに機能を抱き合わせていることが考えられ

答えて

1

問題<script src='https://www.google.com/recaptcha/api.js'></script>が含まれています。

あなたの鍵を作成するとき、彼らはあなたを与えるコードを実装してみてください。PHPロジックの検証のために

<form id="subscribe-form" class="form-inline" action="phpScripts/subscribe/subscribeHandler.php" method="post"> 
    <div class="input-group"> 
     <input type="email" name="email" class="form-control" size="50" placeholder="Email Address" required> 
     <div class="g-recaptcha" data-sitekey="{keyhere}"></div> 
     <div class="input-group-btn"> 
      <button class="btn btn-danger" data-sitekey=" data-callback="submitForm">Subscribe</button> 
     </div> 
    </div> 
</form> 

を:

if ($_POST['g-recaptcha-response']) { 
$secret = '{keyhere}'; 
$response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=" . $secret . "&response=" . $_POST['g-recaptcha-response'] . "&remoteip=" . $_SERVER['REMOTE_ADDR']); 
     $response = json_decode($response); 
     if (! $response->success) { 
      //return error 
     } 

     //code logic below 
} 

キーを作成する際に提供さdivのコードが正しくのすべてを生成する必要がありますあなたのフォームを提出する際にPHPの検証によって処理できるようにするために、最後からHTMLを使用します。

1

ここに解決策があります。

  • クライアント側
<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>reCaptcha</title> 

    <!--api link--> 
    <script src="https://www.google.com/recaptcha/api.js" async defer></script> 
    <!--call back function--> 
    <script> 
     function onSubmit(token) { 
      document.getElementById('reCaptchaForm').submit(); 
     } 
    </script> 
</head> 
<body> 
<div class="container"> 
    <form id="reCaptchaForm" action="signup.php" method="POST"> 
     <input type="text" placeholder="type anything"> 
     <!--Invisible reCaptcha configuration--> 
     <button class="g-recaptcha" data-sitekey="<your site key>" data-callback='onSubmit'>Submit</button> 
     <br/> 
    </form> 
</div> 
</body> 
</html> 
  • サーバー側での検証は:、私は数時間のために同じ問題に直面していた
<?php 
//only run when form is submitted 
if(isset($_POST['g-recaptcha-response'])) { 
    $secretKey = '<your secret key>'; 
    $response = $_POST['g-recaptcha-response'];  
    $remoteIp = $_SERVER['REMOTE_ADDR']; 


    $reCaptchaValidationUrl = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=$secretKey&response=$response&remoteip=$remoteIp"); 
    $result = json_decode($reCaptchaValidationUrl, TRUE); 

    //get response along side with all results 
    print_r($result); 

    if($result['success'] == 1) { 
     //True - What happens when user is verified 
     $userMessage = '<div>Success: you\'ve made it :)</div>'; 
    } else { 
     //False - What happens when user is not verified 
     $userMessage = '<div>Fail: please try again :(</div>'; 
    } 
} 
?> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="UTF-8"> 
     <title>reCAPTCHA Response</title> 
    </head> 
    <body> 
     <?php 
      if(!empty($userMessage)) { 
       echo $userMessage; 
      } 
     ?> 
    </body> 
</html> 
4

signup.phpファイルを作成します。ついに私が最後の論理を理解するまでこの "不可視のキャプチャ"! g-recaptcha-response

このテキストエリアのみで通常起こる課題が完了した後の応答文字列(と移入のIDと名前を持つ空のtextarea要素があるため あなたが応答を取得しない理由は単純です"invisible-captcha"の場合は、grecaptcha.execute();に "submit"ボタンを明示的に呼び出してから、テキストエリアに値が入力され、フォームが自動的に送信されます(callback関数を使って投稿をバインドしたと仮定します)。

私の場合は、すでにPHPでフォームを処理しており、検証を再現しているので、古い「チェックボックス」バージョン(少なくとも改善されるまで)に固執することにしました。 (フォーム提出ロジック、ボタンアクション、JavaScriptコード)をチェックボックスを隠すだけです!特にどちらの方法もほぼ同じです!

関連する問題