site google example asp.net captcha recaptcha

asp.net - google - recaptcha v3 example



Cómo hacer que reCAPTCHA funcione con un ValidationGroup en ASP.Net(captcha) (7)

El complemento reCAPTCHA ASP.NET está escrito para ser compatible con ASP.NET 1.1, lo que significa que el concepto ValidationGroup (que es nuevo en ASP.NET 2.0) no es compatible. Pero el complemento viene con un código fuente descargable , por lo que puede modificarlo usted mismo para que sea compatible con ValidationGroup .

En ASP.NET 2.0, los validadores deben heredar de BaseValidator e implementar IValidator , lo que significa que debe cambiar el tipo de BaseValidator para heredar de BaseValidator lugar de WebControl . Luego deberá modificar el código un poco para implementar todos los métodos y propiedades definidos en BaseValidator . Luego puede usar este nuevo control en su página, que ahora es compatible con ValidationGroup .

Estoy usando el plugin ASP.Net y el control provisto por reCAPTCHA . Puedo lograr que el control funcione correctamente si el botón de envío en el formulario web no está en un grupo de validación. No hay atributo de grupo de validación para el control reCAPTCHA.

¿Alguien ha tenido éxito con esta o con alguna solución para hacer que el control reCAPTCHA funcione cuando hay un grupo de validación en el formulario web?


Puede agregar CustomValidator, implementar OnServerValidate que validaría los datos de ReCAPTCHA. CustomValidator se puede asignar a cualquier ValidatorGroup.


Esto funcionó para mí ...

  1. Agregue un validador personalizado con el grupo de validación correcto.

  2. Es su llamada al método ServerValidate ..

    recaptcha.Validate();

  3. Luego verifique lo siguiente antes de su procesamiento principal ...

    if (Page.IsValid && recaptcha.IsValid) {respose.write ("válido"); }

HTH.


Consulte los controles de ReCaptchaImage y ReCaptchaValidator que forman parte de Altairis Web UI Toolkit: http://altairiswebui.codeplex.com/

Es un conjunto de componentes web de código abierto, que contiene bastante decente y cumple con los estándares de ASP.NET (si puedo decir que es el autor :-) la implementación de ReCaptcha for Web Forms.


Pensé que simplemente ampliaría los comentarios de algunos otros con algún código de trabajo ...

<recaptcha:RecaptchaControl ID="RecaptchaControl" runat="server" /> <asp:CustomValidator ID="RecaptchaValidator" runat="server" OnServerValidate="RecaptchaValidator_ServerValidate" ErrorMessage="Recaptcha input invalid." ValidationGroup="SomeValidationGroup" />

Y el código detrás ...

protected void RecaptchaValidator_ServerValidate(object sender, ServerValidateEventArgs e) { this.RecaptchaControl.Validate(); e.IsValid = this.RecaptchaControl.IsValid; }

¿Alguien puede pensar en una forma más simple de hacerlo? Felicitaciones a Vidalik por las ideas sobre el uso de OnServerValidate.


Para hacer la validación requerida del lado del cliente y sin alterar el código fuente de ReCaptcha, agregué un CustomValidator a mi formulario y creé una función de JavaScript para validar el campo de entrada de texto.

<asp:CustomValidator ID="reqRecaptcha" runat="server" ClientValidationFunction="validateRecaptcha" Text="Required"></asp:CustomValidator>

Para averiguar el ID del campo de entrada generado, miré el código fuente de la página y noté que el campo de entrada siempre era recaptcha_response_field . (Por favor corrígeme si estoy equivocado) Sabiendo esto, pude crear el JavaScript (usando JQuery y una función personalizada para verificar la validez de un control).

function validateRecaptcha(sender, args) { args.IsValid = isFieldValid("input[id$=''recaptcha_response_field'']"); }

NOTA: Si los desarrolladores cambian la salida del control reCaptcha, es posible que no tenga en cuenta el cambio que resulta en que la toma del validador funcione.


La sugerencia de RemotecUk funcionó para mí sin agregar un validador personalizado.

protected void button_onclick(object sender, EventArgs e){ recaptcha.Validate(); if(!Page.IsValid && recaptcha.IsValid){ lblError.Text = "Please check your captcha entry"; } else { //do your thing } }