Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

466
Vistas
¿Cómo mostrar reCaptcha v3 solo en la página de registro?

Estoy creando una aplicación con Angular 12 e Ionic. He protegido el formulario de registro con el paquete ng-recaptcha ( https://github.com/DethAriel/ng-recaptcha ) que utiliza Google reCaptcha v3 ( https://developers.google.com/recaptcha/docs/v3 ) .

Mi problema es que la insignia se muestra en cada página visitada después del formulario de registro.

ingrese la descripción de la imagen aquí

Por ejemplo, si me registro, la página me redirige a la página de inicio de sesión y allí también se muestra la insignia. He intentado implementar el método ngOnDestroy de esta manera:

 ngOnDestroy() : void{ if (this.recaptchaSubscription) { this.recaptchaSubscription.unsubscribe(); } const element = document.getElementsByClassName('grecaptcha-badge')[0]; if(element){ this.renderer2.removeChild(this.document.body, element.parentElement); } }

Esto funciona bien, soy redirigido a la página de inicio de sesión sin mostrar la insignia, pero si trato de registrar un nuevo usuario, pierdo la protección de captcha. Es como si el componente captcha ya no se generara.

ACTUALIZAR

Para usar el captcha, solo agrego el servicio al constructor de esta manera

 constructor(... private recaptchaV3Service: ReCaptchaV3Service, ...) { }

Luego lo uso cuando lo necesito así.

 onSubmit(): void{ this.recaptchaSubscription = this.recaptchaV3Service.execute('registerCustomer').subscribe((recaptchaToken) => { //Do things });

También en mi app.module tuve que agregar esto en la sección de proveedores:

 providers: [ ReCaptchaV3Service, { provide: RECAPTCHA_V3_SITE_KEY, useValue: environment.captchaKey } ],
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Lo que hemos hecho en estos casos no es eliminar la insignia del DOM, solo alternar la visibilidad, por lo que AfterViewInit muestra la insignia:

 ngAfterViewInit() { const element = document.getElementsByClassName('grecaptcha-badge')[0] as HTMLElement; if (element) { element.style.visibility = 'visible'; } }

y por supuesto en OnDestroy lo ocultamos:

 ngOnDestroy() { if (this.recaptchaSubscription) { this.recaptchaSubscription.unsubscribe(); } const element = document.getElementsByClassName('grecaptcha-badge')[0] as HTMLElement; if (element) { element.style.visibility = 'hidden'; } }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda