2016-04-18 11 views
1

Ich habe ein Formular mit mehreren Feldern & recaptcha. Wenn eines der Felder ungültig ist, wenn auf die Schaltfläche zum Senden geklickt wird & recaptcha ist gültig, sendet das Formular, validiert diese Felder jedoch und gibt eine Fehlermeldung an den Benutzer zurück, wenn es fehlgeschlagen ist.Google recaptcha nicht beim zweiten Mal auf der Serverseite

In diesem Stadium bleibt recaptcha überprüft & validiert am Frontend. Wenn der Benutzer das Problem in dem Feld behebt, das die Fehlermeldung enthielt, und das Formular erneut sendet, ist die Antwort von recaptcha falsch und wird daher nicht überprüft.

enter image description here

Nachdem ich gültige E-Mail eingeben, bekomme ich diese:

enter image description here

Meine Funktion, die das Captcha prüft, ist dies:

enter image description here

auf falschen es ergibt in dieser Fehlermeldung, die auf dem obigen Screenshot angezeigt wird.

+0

Ist das nicht erwartetes Verhalten? Ich würde lieber kein Formular (und auch keine Validierung) einreichen, bis alle Einträge validiert sind. – bugnumber9

Antwort

2

Eine Recaptcha-Validierung ist nur einmal erfolgreich.

Sie haben ein paar mögliche Ansätze:

  • einer Session-Variablen speichern, dass der Benutzer erfolgreich das Captcha abgeschlossen hat und erfordern es keine Validierung zum zweiten Mal passieren. Stellen Sie sicher, dass die Variable bei erfolgreicher Übermittlung gelöscht wird, oder ein Angreifer könnte einmal lösen und eine Million Mal senden.
  • Zeigen Sie das Captcha erneut an (mit einem Anruf grecaptcha.render), und fordern Sie sie auf, es erneut auszufüllen, wenn das Senden des Formulars fehlschlägt.
  • Validiere das Captcha erst, wenn alle anderen Felder zuerst validiert wurden.
+0

danke, werde das tun – GGio

2

Von den offiziellen docs:

Wenn Ihre Website führt Server-seitige Validierung einer AJAX-Anforderung verwenden, Sie nur die Token reCAPTCHA Antwort des Benutzers überprüfen sollten (g-recaptcha-Reaktion) einmal. Wenn ein Verifizierungsversuch mit einem bestimmten Token unternommen wurde, kann es nicht erneut verwendet werden. Sie müssen grecaptcha.reset() aufrufen, um den Endbenutzer zu bitten, mit reCAPTCHA erneut zu überprüfen.

Das bedeutet, dass Ihre Funktion verifyCaptcha() nur einmal ausgeführt werden muss. Speichern Sie ein Überprüfungs-Flag in einer Sitzungs-Var und überprüfen Sie, ob es existiert und dass es bei jeder nachfolgenden Anfrage gültig ist.

+0

danke für die referenz. Sinn macht – GGio

+0

Upvote für einen Dokument-Link. – ceejayoz