簡體   English   中英

如何在同一頁面中驗證 hCaptcha,然后將答案重定向到 post/ajax.php?

[英]How can I validate a hCaptcha in the same page and afterwards redirrect the answer to post/ajax.php?

我使用其他人編寫的腳本,但我根本不懂 javascript。 我想更改以下用例:如果您按下按鈕,它將顯示一個帶有驗證碼的模式。 驗證驗證碼后,頁面將處理 ajax.php 的一些數據。 我有適用於先前驗證碼的代碼,但我想通過 hCaptcha 來實現。

    function goShortlink(sid) {
        $('#goShortlink').modal({backdrop: 'static', keyboard: false});
        $('.captcha-holder').CBCaptcha({
            clickDelay: 500,
            invalidResetDelay: 2500,
            requestIconsDelay: 1500,
            loadingAnimationDelay: 1500,
            hoverDetection: true,
            enableLoadingAnimation: true,
            validationPath: 'system/libs/captcha/request.php'
        }).bind('success.CBCaptcha', function(e, id) {
            validateShortlink(sid);
        });
    }";

來自 system/libs/captcha/request.php 的驗證路徑是

<?php
session_start();
require('session.class.php');
require('captcha.class.php');

if((isset($_GET['hash']) && strlen($_GET['hash']) === 48) &&
    (isset($_GET['cid']) && is_numeric($_GET['cid'])) && !isAjaxRequest()) {
    CBCaptcha::getIconFromHash($_GET['hash'], $_GET['cid']);
    exit;
}

if(!empty($_POST) && isAjaxRequest()) {
    if(isset($_POST['rT']) && is_numeric($_POST['rT']) && isset($_POST['cID']) && is_numeric($_POST['cID'])) {
        switch((int)$_POST['rT']) {
            case 1:
                $captcha_theme = (isset($_POST['tM']) && ($_POST['tM'] === 'light' || $_POST['tM'] === 'dark')) ? $_POST['tM'] : 'light';

                header('Content-type: application/json');
                exit(CBCaptcha::getCaptchaData($captcha_theme, $_POST['cID']));
            case 2:
                if(CBCaptcha::setSelectedAnswer($_POST)) {
                    header('HTTP/1.0 200 OK');
                    exit;
                }
                break;
            default:
                break;
        }
    }
}

header('HTTP/1.1 400 Bad Request');
exit;

function isAjaxRequest() {
    return (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest');
}

?>

如何修改它以保持模態,直到驗證 hCaptcha 然后繼續驗證? 我也有其余的代碼,但我不知道這對我們的問題是否不重要。 如果你需要它,請告訴我。

感謝您的好意和幫助!

我使用了數據回調,它奏效了。 在我解決驗證碼后,功能繼續:

<div class="h-captcha" data-sitekey="XXXX-XXX-XXX-XXX" data-callback="correctCaptcha"></div>

所以我在我的頁面上的 javascript 代碼中添加了 var CorrectCaptcha 屬性,現在是這樣的:

<?php 
    if($proxy === false)
    {

        echo '<script src="static/js/simple.timer.js"></script><script async src="static/js/captcha.min.js"></script>';

        $script = "var waitMsg = \"".$lang['l_145']."\";
        var captchaMsg = \"".$lang['l_142']."\";
        
        
        var correctCaptcha = function validateShortlink(sid){
            
            $('#status').html('<div class=\"alert alert-info\" role=\"alert\"><i class=\"fa fa-cog fa-spin fa-fw\"></i> '+waitMsg+'</div>').fadeIn('fast');

            $.post('system/ajax2.php', { a: 'getShortlink', data: sid, token: '".$token."' },
            function(response) {
                if(response.status == '600') {
                    goShortlink(sid);
                    $('#status').html(response.message).fadeIn('slow');
                } else if(response.status == '500') {
                    $('#captchaBox').hide();
                    $('#status').html(response.message).fadeIn('slow');
                } else {
                    $('#status').html(response.message).fadeIn('slow');
                    window.setTimeout(function(){window.location.replace(response.shortlink);}, 500);
                }
            },'json');
        };

        function goShortlink(sid) {
            $('#goShortlink').modal({backdrop: 'static', keyboard: false});
            
        }";
        
        if(count($counters) > 0)
        {
            $script .= '$(document).ready(function(){';
            foreach($counters as $counter)
            {
                $script .= "$('#staticTime_".$counter."').hide(); $('#short_".$counter."').startTimer({onComplete: function(element){window.location.reload();}}); $('#short_".$counter." div').css('display','inline');";
            }
            $script .= '});';
        }

        $packer = new JavaScriptPacker($script, 'Normal', true, false);
        $packed = $packer->pack();
        
        echo '<script>'.$packed.'</script>';
    }
?>

Ajax2.php 看起來像

                $sid = $db->EscapeString($_POST['data']);
            $linkData = $db->QueryFetchArray("SELECT * FROM `shortlinks_config` WHERE `id`='".$sid."' AND `status`='1' LIMIT 1");
            if(empty($linkData['shortlink']) || empty($linkData['password']))
            {
                $resultData = array('message' => '<div class="alert alert-danger" role="alert"><i class="fa fa-exclamation-triangle fa-fw"></i> '.$lang['l_482'].$_POST['data'].'</div>', 'status' => 500);
            }
            else

該代碼適用於舊的驗證碼,並且沒有將 validateShortlink 歸因於 varcorrectCaptcha,但現在我遇到了另一個問題。 我認為通過這個屬性,correctCaptcha = function validateShortlink(sid),POST['data'] 沒有數字的形式,所以我在 ajax2.php 中得到一個錯誤,即短鏈接不存在於進行比較時的數據庫。 我在錯誤附近寫了一個 echo 來查看 sid 的樣子,我有類似的東西:

`P0_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJwYXNza2V5IjoiaHNxRWc0ZVdLUmNPTHZybGFxZ0p4djlsTlVLYktIQ2VOaUI3Mmw3VmZqa21kVDh5Q0Q5N2NoSHBHbjJ2dHdXRWU3YnU2OGtpZHB4eVpJYllzTFBDay9MMXVIZXFicVN1QTVUSWxmU2txcGU3ZnMxOUFVOGk1a0IvQ2JRUkU5ZDluL2FHZTF2amUxNnZpM085UE9PVGcwR1JyOWFsYXNMK2h2UitPWG5jcWFmVzhQNXlCU0sydm9TakhZNkVSbzJ1ZEh4TWIyQmN0bzFPZEVCdnViRjhjT3FYRVhMUXF1WTN1Z1EyVDdhR2xGK28xTkRHRGkzZVM5MXVBTmUxSVE4M1NSYkFpN253MnNVdFRzVDJyYWs0OUVGdXFHOHgzbjBhRENSMnpvZGRYSGFUUEtBLzNFTUpVVDBWU1NSRWtuVjBiY01oVktzSmF1R0pKcjlwSnJwaUl2N3NKSlJBVm9pOW5ZVGt6K3hKOTlOcHVKRG9SdDR1QmxKeW1ndWcvL0x2N3NDK2JMSnBzeENSM3U5Ly9wcnlwd3R5ZWlmZHRZNlM2UERmUG00eFNQTERwNGdnS2NUbGNqYjFkeU9ZTVFiaFEyWi8rakJkV2lZMG1QQ20yRnFRVVhoME9CdjJtNGdoRGplOUJYNm15ZUR4UFZYdEN6R214UVJOTTZrWDRlOGtZY3JqUlNzYk96OXNjaXBQL2REOHNCSzlTNjJLc2dTNkFpczM0ZnFqcXFTRHRKN0xGUjc4UlYycWlCcFQvK2JweC9hOEgwdjd6eXM5aHRYZ1lrdU5YQ0hQc0x4ZWRHek1YVWtPRTdVVjNhMzNTcVg4bFhnL0RxTFA3cFVrb3RLWU1qcjZ5OUp5cDdxME1UUWN5Zy9XN290WE5ucTlNNnRHcU4xRW9uWVAxQ1dmckZKTENyck1XVUdkb01LQy9mSmFuZE0rMzZManpuRzNGWmhpREFIM1U5clF0RjNCeUdWNnUrcTBaTHdWV0FQSFZHcWdac3ZSTGxrY1V2RzRPNDg4RHpzVmVDQ3FxMFczOTNwR0hYeFpNWTBxWmFqTzlBZEpGd1EySG94akdOTWorWVZXRlJ6WUdhbS84VFFVZVBWejdZLzBuVmF5NHRwNzhJNXlYTmliUVBxM0d0MC9MV1BVS3ZCUnd5ZXlCbkF2R0Q3eDJEdmJ5djZVNGorTnpNakJaQnJhVjlSclEvd2pDaEEyS0dHSURYQk0zTTBhekMva3hIZDJacG95c2x1bFNKWUhyRC9iL1JVUFZkdVFJNXFtQ09mdUtWeHlUREVseDY4SVZuNTN3TG1GK3ZzcHg5dEhUbXUxQ2ZEcmwzcnd0RjhNOHlqV2NzUTdEc3JKd0MzYXlxZVJSMVRhcGJkSXN4bHZRcE9NWW1EQWtwMzhWMk9ZaWNHazQyZlBoSGtCYlcraXYrZUY5dXV2RWozcGkxaUlhb0tNVTNvNkRzaEJxbVlDSFFvbVNjSDQ5R1pRUmlWZHZSQy92N0V2ekN2ejBrcXBkZ3RsYm0yd3pUVXdiSGZEUEFFaFlONWhiN2F4aUpYdzN2WTBNcUk5L1ZVMENoZkZqVE1QWHRVQWNCd3p0Qkl4N25rQXdpaHdsYms3ZnlrVVgvSjRtMlYxdWNjTUQ4bFllT00zWXZCd0ZmU1hRckFkOVRoL1JVbXhNQnhEVElpZDVaYkFGSjBLRm93RXlWRnlFTUlJYUZyNHdKKy9ReTdDSjVEeVNiQlBxQWtiUEdSSCtUSDc0MFlxampma2IxRkx6eTBPMVBFMGkxaWRWd1p1bUtOSE1LajhGSi9pT3JTUFMrKzM5K0o1VzMxZ3A2dEcvM3NpM0M4WEt5WTIrV0pNdWJaZklDa2xhenIzREFQZm5ENFFSN2ovcEJvNkRqN2Q4YnIraTQzcTZyRDhnMzVPMVZseE5pOU9Hb0tRTHVQY3BtdG1Ib2ovZFUwa05Xb0hZUTNza3hreDZiY3BRWE1COUhMN2NuMXFNb0JyQUZtUUQzTnp3UWxVS2Z3cmNQSHRqZWxpZWJnWXU1MkwxOTFhWG5Id09nUUtIcU53b3REZmhjeVFlMW56STFPV1M3U1pQVVZCNS9NcUNzWC84cGhlQmdwenRFNW5LWXo1QnVsTEhtSk9MWnV2RG1Ya05WRkcwL0lXTGJzY1U1OEpXYUIzRXlsTFJud1ZhN1d0RFF0NlZuNzB4a1RxK254MEEzUkVZTjREa0Z1akVVd2ZrakZTQm0vamswN21LZlRqRlp3UkZON0Vkd0UwcXEyeDNmbDRRSGlqTUg4UDVnYXVSWDl1NTR2dlpWS08xWTRsQUlEK3dLSEw4d2ZLOGlXQzNUV0t3NWMvblpXUVVES1JwSjFQeUJnOWdEOVVFQk1PZTFVVGZCNUsvcXhEYkdvUmp4SjBoU1JsSnFhNkErYUdqWnBJSHJ1aS9vZUhkM0VCTkowd1NsNEVGc2NPaGQ4OHpVUXFjWmVYaENsZW9WM2FZbGZiYnpsY0x2dG0yVTMxaEZzV1lOTXFEdFlRVE5sVUwzblRxSlVNbmM5UUlCQTVidXg3ejUwQ2NRVUNTUHg1UE1Jc09QV3Y3MllQQWg1c2NGbllvcVZCNlRMeXh3VzRZamdFYkNSMWQrdnJRbE9hbjc3Nm1DeHVLRWhvZzA1cVY2OFJuTElnOStYa0pHR0JDcUkvQ1BSbWZremplckgwM3dYN1JZMWQ4SVdmL0Fqd0IrUVRvc09aZ3dBZ2g0MytjNlkyWVRyTWFnazJIMEJoMmMwV3lVSVozdmowSmZUY09wNG4iLCJleHAiOjE2MDMxODc2NjcsInNoYXJkX2lkIjoyMzU4MDExNjcsInBkIjowfQ.fDyx5hr2vXLScCpXO5G1nzE6yH-

我如何使用正確的驗證碼屬性來發送正確的 sid,而不是整個最后一段?

謝謝你的好意和幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM