首页 文章

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

提问于
浏览
2

在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

    创建一个包含在 app.module.tsProviders 部分中的服务 . 这样,服务就可以在整个应用程序中保持其状态 .

    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 并执行 getUid ,它将从服务中获取UID .

    export class AccountProfilePage {
        constructor(private authService: AuthService) {}
    
        someMethod() {
          this.authService.getUid(); // Returns UID
        }
    }
    

相关问题