登录页面使用户即使验证失败也可以进入应用程序

时间:2018-11-06 17:25:45

标签: firebase ionic-framework ionic3 firebase-authentication

我用电话验证(sms)制作了一个简单的应用程序。 我的问题分为两个部分,第一部分是验证代码(sms)总是以某种方式出错(我确实知道了,但是它没有通过确认),第二部分(如标题中所述)是即使身份验证失败,用户仍然可以访问主要活动。

该功能通过按钮调用。
函数是:

  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.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 :(得分:0)

我在您的代码中看不到它,但是在任何调用方法以推送主应用页面的地方都看不到它。用户仅成功登录后,才应显示主应用页面。如果此操作不起作用,则可能是用户进入了您的应用,因为Firebase功能是异步的。