Страница входа позволяет пользователю войти в приложение, даже если аутентификация не удалась - PullRequest
0 голосов
/ 06 ноября 2018

Я сделал простое приложение с аутентификацией телефона (смс). Моя проблема делится на две части, первая часть состоит в том, что код подтверждения (смс) всегда как-то неверен (я получаю его, однако он не проходит подтверждение), а вторая часть (как указано в заголовке) заключается в том, что пользователь все еще может получить доступ к основным действиям, даже если аутентификация не удалась.

функция вызывается с помощью кнопки.
функция:

  signIn(){
    const appVerifier = this.recaptchaVerifier;
    const phoneNumberString = "+972" + this.phoneNumber.substring(1,10);
    firebase.auth().signInWithPhoneNumber(phoneNumberString, appVerifier)
    .then( confirmationResult => {
      // SMS sent. Prompt user to type the code from the message, then sign the
      // user in with confirmationResult.confirm(code).
      let prompt = this.alertCtrl.create({
      title: 'Enter the Confirmation code',
      inputs: [{ name: 'confirmationCode', placeholder: 'Confirmation Code' }],
      buttons: [
        { text: 'Cancel',
          handler: data => { console.log('Cancel clicked'); }
        },
        { text: 'Send',
          handler: data => {
            confirmationResult.confirm(data.confirmationCode)
            .then(function (result) {
              // User signed in successfully.
              this.uid = result.user.uid
              this.addUser(this.fullName, this.uid);
              console.log(result.user);
              // ...
              }).catch(function (error) {
                console.log("Invalid code") // always getting here
              });
            }
          }
        ]
      });
      prompt.present();
    }).catch(function (error) {
      console.log("SMS not sent")
    });
  }

ОБНОВЛЕНИЕ (app.component)
решение принимается в конструкторе app.component.ts

  constructor(platform: Platform, statusBar: StatusBar, splashScreen: SplashScreen) {
    var that = this
    platform.ready().then(() => {
      // Okay, so the platform is ready and our plugins are available.
      // Here you can do any higher level native things you might need.
      statusBar.styleDefault();
      splashScreen.hide();


      firebase.auth().onAuthStateChanged(function(user) {
        if (user) {
          that.rootPage = TabsPage; // even though auth failed, he comes here
        } else {
          that.rootPage = LoginPage;
        }
      });
    });
  }

1 Ответ

0 голосов
/ 07 ноября 2018

Я не вижу его в вашем коде, но везде, где вы вызываете метод, чтобы нажать на главную страницу приложения. Вы должны показывать главную страницу приложения только после того, как пользователь успешно вошел в систему. Если это не работает, возможно, пользователь заходит в ваше приложение, потому что функция Firebase - асинхронная.

...