Как сбросить невидимую рекапчу - PullRequest
0 голосов
/ 26 июня 2018

У меня есть эта маленькая форма, и я реализовал невидимую recaptcha в asp.net Webforms.Эта повторная проверка выполняется, только если отправка действительна.Хотя мне удалось проверить ответ.

Мне нужно сбросить невидимую recaptcha для каждой отправки, но я не могу заставить его работать.Не могли бы вы помочь мне?

Это мой код на стороне сервера:

        public string CaptchaSiteKey
    {
        get
        {
            return System.Configuration.ConfigurationManager.AppSettings["CaptchaSiteKey"];
        }
    }

    public string CaptchaSecret
    {
        get
        {
            return System.Configuration.ConfigurationManager.AppSettings["CaptchaSecret"];
        }
    }


    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void b1_Click(object sender, EventArgs e)
    {
        if (!Validates(CaptchaSecret, Request.Form["g-recaptcha-response"]))
        {

        }
        else if (IsValid)
        {
            SendToDatabase();
        }

    }

    public static void SendToDatabase()
    {


    }

    public bool Validates(string privateKey, string reCaptchaResponse)
    {
        string Response = Request["g-recaptcha-response"];//Getting Response String Append to Post Method
        bool Valid = false;
        //Request to Google Server
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create
        (string.Format("https://www.google.com/recaptcha/api/siteverify?secret={0}&response={1}", privateKey, reCaptchaResponse));
        try
        {
            //Google recaptcha Response
            using (WebResponse wResponse = req.GetResponse())
            {

                using (StreamReader readStream = new StreamReader(wResponse.GetResponseStream()))
                {
                    string jsonResponse = readStream.ReadToEnd();
                    if (jsonResponse.Contains("success\": true"))
                    {
                        Valid = true;
                    }


                }
            }

            return Valid;
        }
        catch (WebException ex)
        {
            throw ex;
        }
    }

А это мой HTML-код и код JavaScript

 <pre><html xmlns="http://www.w3.org/1999/xhtml">
 <head runat="server">
   <title></title>
       <script src='https://www.google.com/recaptcha/api.js' async defer>
          </script>
     <script>
    var btnLoginEvent = null;

    function DoLogin() {
        var btn = document.getElementById("<%=b1.ClientID%>");
        btn.onclick = btnLoginEvent;
        btn.click();
    }

    function DoValidate(event) {
        event.preventDefault();
        if (Page_ClientValidate()) {
            grecaptcha.reset();
            grecaptcha.execute();
        }
    }

    function DoLoad() {
        var btn = document.getElementById("<%=b1.ClientID%>");
        btnLoginEvent = btn.onclick;
        btn.onclick = DoValidate;
    }
  </script>
  </head>
   <body>
<form id="form1" runat="server">
    <asp:TextBox ID="txt_name" runat="server" />
    <asp:RequiredFieldValidator
        ControlToValidate="txt_name"
        ErrorMessage="Name"
        Text="please sput something in here"
        runat="server" />
    <div class="g-recaptcha"
        data-sitekey="<%=CaptchaSiteKey%>"
        data-callback="DoLogin"
        data-size="invisible">
    </div>
    <asp:Button ID="b1" Text="Submit" runat="server" CausesValidation="true" OnClick="b1_Click" />
    <asp:ValidationSummary
        HeaderText="You must enter a value in the following fields:"
        DisplayMode="BulletList"
        EnableClientScript="true"
        runat="server" />
</form>
   <script>
    DoLoad();
    </script>
 </body>
</html>

Я также выложумои ключи, которые я поместил в свой webconfig, так как я всегда могу изменить их потом:

  <appSettings>

<add key="CaptchaSiteKey"   value="6LciPmAUAAAAABBbY_Q78Jb_ANU9DJDzwmZ2t9Vj"/>
<add key="CaptchaSecret" value="6LciPmAUAAAAAEz0x42LC-D3V95Hju8MWW_Nsg3l"/>

 </appSettings>

Примечание: игнорировать «pre» перед HTML-кодом, это был способ, чтобы я мог поместить все HTMLи код JavaScript.

...