Ионный | Невозможно сбросить recaptcha (таким образом, пользователь не может повторить попытку аутентификации) - PullRequest
0 голосов
/ 07 мая 2019

Я использую проверку подлинности телефона firebase (проверка SMS OTP), и для этого требуется верификатор recaptcha. Поток работает нормально, если пользователь преуспевает с первой попытки, но если он терпит неудачу, он не может повторить попытку (поток не провоцирует из-за сброса настроек рекапчи).

Я посмотрел в документах Firebase - https://firebase.google.com/docs/auth/web/phone-auth#use-invisible-recaptcha

и это то, что они рекомендуют делать;

grecaptcha.reset(window.recaptchaWidgetId);

// Or, if you haven't stored the widget ID:
window.recaptchaVerifier.render().then(function(widgetId) { // <- I've tried this 
  grecaptcha.reset(widgetId);
}

Однако, похоже, это не решает проблему, и пользователь все еще не может повторить попытку.

Login.ts -

declare global {
    interface Window { grecaptcha: any;
        _recaptchaVerifier: auth.RecaptchaVerifier; }
}

...

ionViewDidLoad() {
    window._recaptchaVerifier = new auth.RecaptchaVerifier('submitButton', {
        'size': 'invisible',
        'callback': function(response) {
            this.submitProfile()
            },
        'expired-callback': ()=>{
            this.resetReCaptcha()
        }

        });
    }

private submitProfile() : void{

            this._authAf.auth.signInWithPhoneNumber(x, window._recaptchaVerifier).then(result=>{
                    const alertSignIn = this._alertCtrl.create({
                    title: 'Enter Code',
                    inputs: [{type: 'number', name: 'vCode'}],
                    buttons: [{text: 'Verify', handler: data => {

                        const loadSignIn = this._loadingCtrl.create({})
                        loadSignIn.present().then(()=>{
                            result.confirm(data['vCode']).then(() =>{
                                loadSignIn.dismiss()
                            }, e=>{
                                loadSignIn.dismiss()
                                this.resetReCaptcha();
                                return
                            })  
                        });
                    }}
                ]
            });
            alertSignIn.present();
        }).catch((e)=>{
            this.resetReCaptcha();
        })
    }

private resetReCaptcha(){
        window._recaptchaVerifier.render().then(function(widgetId) {
            window.grecaptcha.reset(widgetId);
        })
    }

login.html

<button  id="submitButton" ion-button full [disabled]="!profile.valid">Sign</button>

Поток - после нажатия submitButton должно появиться предупреждение и подтвердить.

Ожидаемые результаты : существующая рекапча должна сброситься и позволить пользователю повторить попытку

Фактические результаты : нет признаков сброса, signInWithPhoneNumber не похоже, чтобы "ответить"

...