Je en ai parlé dans un fil sur le repo GitHub: Support for PhoneNumber Auth #990
Heres un copier-coller, il vous obtiendrez connecté via téléphone et évidemment obtenir le travail recaptcha:
MISE à JOUR: (problème résolu)
Je confirme que je suis maintenant capable de se connecter par mobile angulaire! Assurez-vous que si vous souhaitez utiliser ReCaptcha en tant que widget, assurez-vous que la div contenant est créée lors de l'initialisation de l'objet.
Je préfère la méthode 'invisible', donc j'ai mis un div vide quelque part sur ma page html:
<div id="phone-sign-in-recaptcha"></div>
et à l'intérieur ngOnInit() je l'ai instancié:
window['phoneRecaptchaVerifier'] = new firebase.auth.RecaptchaVerifier('phone-sign-in-recaptcha', {
'size': 'invisible',
'callback': function(response) {
// reCAPTCHA solved - will proceed with submit function
},
'expired-callback': function() {
// Reset reCAPTCHA?
}
});
La fonction de soumission de formulaire qui est déclenchée lorsque la recaptcha est résolue est:
this.auth.signInWithPhoneNumber(phoneNumber, window['phoneRecaptchaVerifier']).then(function(confirmationResult){
var code = prompt('We have send a code to ' + phoneNumber + ', please enter it here', "");
if (code) {
confirmationResult.confirm(code).then(function (result) {
// User signed in successfully.
// Reset reCAPTCHA?
// ...
}).catch(function (error) {
// User couldn't sign in (bad verification code?)
// Reset reCAPTCHA?
// ...
});
}
}).catch(function(error){
console.log(error.message);
});
Pour accéder à la variable globale grecaptcha
pour appeler grecaptcha.reset([widgetId])
, ce que vous voulez faire dans le cas où la recaptcha a expiré ou s'il y a une erreur de connexion et que les utilisateurs doivent réessayer.
npm install @types/grecaptcha --save
et retour dans votre module composante où votre recaptcha est, directement sous vos importations Déclarez la variable: declare var grecaptcha: any;
dans mon code, je l'ai remplacé le commentaire // Reset reCAPTCHA?
avec l'appel suivant:
window['phoneRecaptchaVerifier'].render().then(function(widgetId) {
grecaptcha.reset(widgetId);
});
Tout fonctionne très bien maintenant!
Hmm c'est un problème intéressant, mais je ne pense pas que ce soit à cause de l'angle. Est-ce que le 'recaptcha-container' existe en tant qu'ID dans votre code HTML? Est-ce que cette ligne de code s'exécute? –
oui, j'utilise simplement un div avec l'id = "recaptcha-container". De plus, si j'attribue le firebase.auth.RecaptchaVerifier à une variable $ scope et à la console.log, je peux voir qu'il contient une forme d'objet. – MNelmes
Gotcha, ok deux choses de plus, et si vous essayiez de faire '' '$ scope. $ Apply()' '' '? Je doute que ça va le réparer, mais juste une idée. Et voyez-vous des erreurs dans la console? –