Mig*_*das 5 ionic-framework angular recaptcha-v3
我正在使用 Angular 12 和 Ionic 构建一个应用程序。我使用 ng-recaptcha 包(https://github.com/DethAriel/ng-recaptcha)保护注册表单,该包使用 Google reCaptcha v3(https://developers.google.com/recaptcha/docs/v3) 。
我的问题是徽章显示在注册表单后访问的每个页面中。
例如,如果我注册,页面会将我重定向到登录页面,并且徽章也会显示在那里。我尝试像这样实现 ngOnDestroy 方法:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,我被重定向到登录页面而不显示徽章,但如果我尝试注册新用户,我就会失去验证码保护。就像验证码组件不再生成一样。
更新
要使用验证码,我只需将服务添加到构造函数中,如下所示
constructor(...
private recaptchaV3Service: ReCaptchaV3Service,
...) { }
Run Code Online (Sandbox Code Playgroud)
然后我在需要的时候就这样使用它
onSubmit(): void{
this.recaptchaSubscription = this.recaptchaV3Service.execute('registerCustomer').subscribe((recaptchaToken) => {
//Do things
});
Run Code Online (Sandbox Code Playgroud)
另外,在我的 app.module 中,我必须将其添加到提供程序部分:
providers: [
ReCaptchaV3Service,
{ provide: RECAPTCHA_V3_SITE_KEY, useValue: environment.captchaKey }
],
Run Code Online (Sandbox Code Playgroud)
在这些情况下,我们所做的并不是从 DOM 中删除AfterViewInit徽章,只是切换可见性,因此- 显示徽章:
ngAfterViewInit() {
const element = document.getElementsByClassName('grecaptcha-badge')[0] as HTMLElement;
if (element) {
element.style.visibility = 'visible';
}
}
Run Code Online (Sandbox Code Playgroud)
当然,OnDestroy我们隐藏它:
ngOnDestroy() {
if (this.recaptchaSubscription) {
this.recaptchaSubscription.unsubscribe();
}
const element = document.getElementsByClassName('grecaptcha-badge')[0] as HTMLElement;
if (element) {
element.style.visibility = 'hidden';
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2828 次 |
| 最近记录: |