Beim Senden der Zeichenauthentifizierung an Firebase.

Code-Fluss ist ...

  1. Der Benutzer gibt die Telefonnummer ein und klickt auf die Schaltfläche
  2. Senden Sie den Wert an den Server und senden Sie den Authentifizierungscode in Textform
  3. Der Benutzer gibt den Authentifizierungscode ein und klickt auf die Schaltfläche
  4. Unterscheidung zwischen Authentifizierungscodewerten

Im zweiten Schritt wird durch Drücken der Taste signIn() ausgeführt, d. H. Der Code.

 const signIn = () => {
    auth
      .signInWithPhoneNumber(mobileNum, appVerifier)
      .then(function(confirmationResult) {

        //start

        window.confirmationResult = confirmationResult;

        confirmationResult
          .confirm(authCode)
          .then(function(result) {
            var user = result.user;
          })
          .catch(function(error) {
          });

        //end
      })
      .catch(function(error) {
        console.log(error);
      });
  };

Zu diesem Zeitpunkt muss der Teil von start bis end nach Schritt 3 (nach dem Schaltflächenereignis) ausgeführt werden.

Das end des start muss warten, bis das Schaltflächenereignis stattfindet.

Wie kann ich das machen?

-1
minimin_bamm 24 Feb. 2020 im 09:12

3 Antworten

Beste Antwort

Sie versuchen zu viel zu tun, ohne dass der Benutzer involviert ist. Das signInWithPhoneNumber -Versprechen sollte so aufgelöst werden, dass die Bestätigungsanforderungsseite angezeigt wird, und beendet werden. Es ist fertig. Der nächste Schritt liegt beim Benutzer, der die Bestätigungsnummer übermittelt.

So sieht es aus

  1. Der Ereignishandler 1 übermittelt die Telefonnummer und löst dann den Bestätigungsbildschirm auf
  2. Der Ereignishandler 2 sendet die Bestätigungsnummer an die Authentifizierungsfunktion und beschließt dann, den Benutzer zu aktualisieren und den Begrüßungsbildschirm anzuzeigen.

Versprechen sind nützlich für die Verwaltung von Computerprozessen, nicht von Benutzerprozessen. Sie können kein Versprechen verwenden, um auf einen Benutzer zu warten. Sie müssen einen Ereignishandler bereitstellen, den sie auslösen können, um den nächsten Schritt des Prozesses fortzusetzen.

0
Michael Landis 24 Feb. 2020 im 07:04

Sie sollten die Bestätigung des Authentifizierungscodes in der Versprechenskette nach links verschieben, damit alles nacheinander ausgeführt wird und Sie den Code ausführen können, sobald beide Versprechungen ausgeführt wurden.


    const signIn = () => {
        auth
          .signInWithPhoneNumber(mobileNum, appVerifier)
          .then(function(confirmationResult) {
            window.confirmationResult = confirmationResult;
            return confirmationResult.confirm(authCode);
          })
          .then(function(result) {
            var user = result.user;
            // end here, auth code has been confirmed and you have access to user
          })
          .catch(function(error) {
            // this will catch errors in either "signInWithPhoneNumber" or "confirmationResult.confirm"
            console.log(error);
          });
      };

0
Jayce444 24 Feb. 2020 im 06:26

Verschieben Sie den nächsten Code in eine andere Funktion:

confirmationResult
          .confirm(authCode)
          .then(function(result) {
            var user = result.user;
          })
          .catch(function(error) {
          });

Und rufen Sie die obige Funktion in onClick von Schritt 3 auf

0
Hadas 24 Feb. 2020 im 06:18