AngularFire2获取UID并在任何页面中使用

时间:2017-08-16 19:06:36

标签: angular firebase ionic-framework firebase-realtime-database angularfire2

在Ionic(AngularFire2)应用程序中,我需要获取Firebase用户UID的每个页面,以从Firebase数据库获取相关数据。例如,在Firebase上有一个节点(' / users'),其密钥是FireBase Auth User UID。

  {
  "users" : {
    "LYW6i8sTbWauCvkXULIbszIWOdm1" : {
      "cellPhone" : "123321",
      "name" : "Name1",
      "userType" : "0"
    },
    "i4KSAzO2UhakowLKOZCa0ZeohRH3" : {
      "cellPhone" : "43343",
      "name" : "Name2",
      "userType" : "1"
    }
  }
}

我正在使用observable来一次又一次地获取每个页面的UID。我想会有很多订阅者,每次离子应用程序都要求Firebase Auth Server获取用户UID?

例如。

export class AccountProfilePage {

      user = {} as User
  constructor(public navCtrl: NavController, public navParams: NavParams, 
    private afDb:AngularFireDatabase, private afAuth:AngularFireAuth) {
  }

  updateProfile(){
      this.afAuth.authState.subscribe(authState=>{
        this.afDb.object('users/'+authState.uid).update({
          cellPhone:this.user.cellPhone
        })
      })
  }
}

这是正确的方法吗?

1 个答案:

答案 0 :(得分:0)

创建一项服务,该服务包含在Providers的{​​{1}}部分中。这样,服务就可以在整个应用程序中保持其状态。

app.module.ts

app.module.ts

@NgModule({ providers: [ AuthService ] }) export class AppModule {}

auth.service.ts

当用户登录应用程序时@Injectable() export class AuthService { private uid: string; setUid(uid: string): void { this.uid = uid; } getUid(): string { return this.uid; } } 然后在任何页面上,您可以在构造函数中包含setUid(usersUid)并执行auth.service,它将从服务中获取UID

getUid