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

AngularFire2 getting UID and using in any page

在 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"
    }
  }
}

我一次又一次地使用 observables 来获取每个页面的 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
        })
      })
  }
}

这是正确的方法吗?

创建一个包含在 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
    }
}