Как отправить форму в случае успеха reCaptcha - PullRequest
1 голос
/ 20 марта 2019

Приветствую всех,

Я не уверен, что это верный способ сделать это. Предположим, здесь есть форма, и если моя recaptcha вернулась успешно, как я могу отправить действие на login.php? иначе, если возвращено ложное, отобразить сообщение об ошибке.

Моя форма

<div class="login-wrapper">
  <form id="login-form" class="login-form" method="POST" action="login.php">

    <input type="text" id="username" name="username" autofocus/>
    <input type="password" id="password" name="password" />
    <div class="g-recaptcha" data-sitekey="my_site_key"></div>
    <button id="login-button" name="login-submit">login</button>

  </form>   
  <script src="https://www.google.com/recaptcha/api.js" async defer></script>
</div>

php reCaptcha

<?php
    if(isset($_POST['login-submit'])){
        $username = $_POST['username'];
        $secretKey = "my_secret_key";
        $responseKey = $_POST['g-recaptcha-response'];
        $userIP = $_SERVER['REMOTE_ADDR']; //optional

        $url = "https://www.google.com/recaptcha/api/siteverify?secret=$secretKey&response=$responseKey&remoteip=$userIP";
        $response = file_get_contents($url);
        $response = json_decode($response);
        if ($response->success)
            // echo "Success";
      // if success form submit to login.php
        else
            // echo "Failed";
      // return error message
    }
?>

Ответы [ 2 ]

0 голосов
/ 20 марта 2019

Я думаю, что у вас есть небольшая логическая проблема, вы уже все делаете правильно, вам просто нужно добавить свои функции входа прямо здесь, в скрипте проверки капчи или наоборот. это означает, что вы можете отправить форму непосредственно в login.php и там проверить, правильна ли recatcha, если да, перейдите к функциям входа, если нет, верните ошибку. вам просто нужно немного изменить существующий код.

HTML

<div class="login-wrapper">
  <form id="login-form" class="login-form" method="POST" action="login.php">    
    <input type="text" id="username" name="username" autofocus/>
    <input type="password" id="password" name="password" />
    <div class="g-recaptcha" data-sitekey="my_site_key"></div>
    <button id="login-button" name="login-submit">login</button>    
  </form>   
  <script src="https://www.google.com/recaptcha/api.js" async defer></script>
</div>

login.php

<?php
    if(isset($_POST['login-submit'])){
        $username = $_POST['username'];
        $password = $_POST['password ']; //password for login check
        //check recaptcha
        $secretKey = "my_secret_key";
        $responseKey = $_POST['g-recaptcha-response'];
        $userIP = $_SERVER['REMOTE_ADDR']; //optional    
        $url = "https://www.google.com/recaptcha/api/siteverify?secret=$secretKey&response=$responseKey&remoteip=$userIP";
        $response = file_get_contents($url);
        $response = json_decode($response);
        if ($response->success){
            // echo "Success";
            // IF SUCCESS PROCEED WITH YOUR LOGIN CHECKING FUCTIONS HERE
        }else{
            // echo "Failed";
            // RETURN ERROR MESSAGE
        }
    }
?>
0 голосов
/ 20 марта 2019

Другой способ - использовать JS-версию reCaptcha, а затем добавить этот скрипт при успешном выполнении reCaptcha для отправки формы

document.getElementById("login-form").submit();

Искать JS API https://developers.google.com/recaptcha/docs/display

...