Я использую проверку подлинности телефона 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
не похоже, чтобы "ответить"