2017-06-29 2 views
2

Ceci est mon formulaire ASP.NET. Je veux ajouter la recaptcha invisible avec la validation côté serveur. Puis-je avoir une aide s'il vous plait?mettant en œuvre Invisible Google reCaptcha pour l'application asp.net?

Je peux faire la validation côté client mais il n'utilise pas de clé secrète. Mon autre question est: avons-nous besoin d'une clé secrète pour recaptcha invisible?

Veuillez voir le code côté serveur que j'ai utilisé pour google recaptcha mais cela ne fonctionne pas pour Invisible recaptcha. Je reçois cette erreur: - reCAPTCHA Erreur: manque-entrée-réponse: non valide Recaptcha

<div id="ContactFormDiv" runat="server"> 
    <div class="form-row form-required"> 
     <asp:Label ID="YourNameLabel" runat="server" AssociatedControlID="YourNameTextBox"> Your Name:</asp:Label> 
     <asp:TextBox ID="YourNameTextBox" runat="server" CssClass="form300" MaxLength="150"></asp:TextBox> 
    </div> 
    <div class="form-row form-required"> 
      <div id='recaptcha' class="g-recaptcha" 
       data-sitekey="site key" 
       data-callback="onSubmit" 
       data-size="invisible"> 
      </div> 
    </div> 
    <div class="form-row-buttons"> 
     <asp:Button ID="SendMessageButton" ClientIDMode="Static" runat="server" Text="Send Message" CssClass="buttonPositive" 
      CausesValidation="True" OnClick="SendMessageButton_Click" /> 
    </div> 
</div> 

code Javascript

<script type="text/javascript" src="https://www.google.com/recaptcha/api.js" async defer></script> 

Serverside code

public class MyObject 
{ 
    public string success { get; set; } 
} 

public static string ReCaptcha_Key = "------------------Site Key-----------------"; 
public static string ReCaptcha_Secret = "--------------Secret Key ---------------"; 

public bool ValidateReCaptcha() 
{ 
    bool Valid = false; 
    //start building recaptch api call 
    var sb = new StringBuilder(); 

    //Getting Response String Append to Post Method 
    string Response = Request["g-recaptcha-response"]; 

    string url = "https://www.google.com/recaptcha/api/siteverify?secret=" + ReCaptcha_Secret + "&response=" + Response; 
    sb.Append(url); 

    //make the api call and determine validity 
    using (var client = new WebClient()) 
    { 
     var uri = sb.ToString(); 
     var json = client.DownloadString(uri); 
     var serializer = new DataContractJsonSerializer(typeof(RecaptchaApiResponse)); 
     var ms = new MemoryStream(Encoding.Unicode.GetBytes(json)); 
     var result = serializer.ReadObject(ms) as RecaptchaApiResponse; 

     //--- Check if we are able to call api or not. 
     if (result == null) 
     { 
      lblmsg.Text = "Captcha was unable to make the api call"; 
     } 
     else // If Yes 
     { 
      //api call contains errors 
      if (result.ErrorCodes != null) 
      { 
       if (result.ErrorCodes.Count > 0) 
       { 
        foreach (var error in result.ErrorCodes) 
        { 
         lblmsg.Text = "reCAPTCHA Error: " + error; 
        } 
       } 
      } 
      else //api does not contain errors 
      { 
       if (!result.Success) //captcha was unsuccessful for some reason 
       { 
        lblmsg.Text = "Captcha did not pass, please try again."; 
       } 
       else //---- If successfully verified. Do your rest of logic. 
       { 
        lblmsg.Text = "Captcha cleared "; 
        Valid = true; 
       } 
      } 
     } 
    } 
    return Valid; 
} 

public bool temp = true; 
protected void SendMessageButton_Click(object sender, EventArgs e) 
{ 
    temp = ValidateReCaptcha(); 
    if (temp == false) 
    { 
     lblmsg.Text = "Not Valid Recaptcha"; 
     lblmsg.ForeColor = System.Drawing.Color.Red; 
    } 
    else 
    { 
     lblmsg.Text = "Successful"; 
     lblmsg.ForeColor = System.Drawing.Color.Green; 
    } 

    Page.Validate(); 

    if (this.Page.IsValid == true && temp == true) 
    { //Page and invisible recaptcha is valid } 
} 

Je reçois cette erreur: - reCAPTCHA Erreur: missing-input-response: Non Val id Recaptcha

+0

Invisible recaptcha? Ça n'a pas de sens. Cela ne défie-t-il pas le but de l'utiliser? – VDWWD

+2

@VDWWD Veuillez effectuer une recherche Google Invisible reCaptcha https://developers.google.com/recaptcha/docs/invisible –

+0

ok ... Il existe. Désolé pour ça. La seule différence est que vous n'avez pas à cliquer sur la case à cocher, mais le reste semble le même et s'il ne vous fait toujours pas confiance, il affichera toujours la validation. – VDWWD

Répondre

0

J'ai aussi un problème similaire et il semble qu'il est plus difficile de trouver un exemple décent. Cependant, j'ai vu que vous avez défini data-callback = "onSubmit" mais je n'ai pas vu où vous avez défini cette méthode. C'est ici? Est-ce que c'est ce qui vous manque?

1

Voilà comment je mis en œuvre l'échantillon de travail:

- côté client (Voir Google Documentation)

<head> 
 
\t <!-- Google Invisible Captcha --> 
 
\t <script src='https://www.google.com/recaptcha/api.js'/> 
 
\t <script> 
 
     function onSubmit(token) { 
 
      document.getElementById("htmlForm").submit(); 
 
     } 
 
\t </script> 
 
</head> 
 
<body> 
 
\t <form id="htmlForm" action="Default.aspx" method="post"> 
 
\t \t <input name="txtName" /> 
 
\t \t <input name="txtEmailAddress" /> 
 
\t \t <button class="g-recaptcha btn btn-default" 
 
        data-sitekey="-------------------Site key--------------" 
 
        data-callback="onSubmit"> 
 
        Submit Request 
 
\t \t </button> 
 
\t </form> 
 
</body>

- Server Side

public static bool IsValidCaptcha() 
    { 

     var secret = "--------------Secret Key ---------------"; 
     var req = 
      (HttpWebRequest) 
       WebRequest.Create("https://www.google.com/recaptcha/api/siteverify" + secret + "?secret=&response=" + HttpContext.Current.Request.Form["g-recaptcha-response"]); 

     using (var wResponse = req.GetResponse()) 
     { 

      using (StreamReader readStream = new StreamReader(wResponse.GetResponseStream())) 
      { 
       string responseFromServer = readStream.ReadToEnd(); 
       if (!responseFromServer.Contains("\"success\": false")) 
        return true; 
      } 
     } 

     return false; 

    } 
+0

Merci Barsham, je vais essayer de lancer cette . –