【问题标题】:AngularFire2 getting UID and using in any pageAngularFire2获取UID并在任何页面中使用
【发布时间】:2017-08-17 18:52:26
【问题描述】:

在 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。我认为会有很多订阅者,每次 ionic 应用程序向 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
        })
      })
  }
}

方法对吗?

【问题讨论】:

  • 您应该创建一个服务并将您的 uid 存储在该服务中,该服务在您注入时创建一次

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


【解决方案1】:

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

【讨论】:

  • 感谢您的回答。我想知道,在 setUID 方法中,我使用订阅方法()来获取 authState,对吗?据我所知,它的行为与流相同?我们能想一想,总会有打开的流,它寻找用户 authstate 吗?
  • 还有一个问题,我在任何页面中注入 AngularFireAuth 服务。它没有自己的状态并在整个应用程序中保持其状态吗?
  • 如果您将 AngularFireAuth 注入根模块,该状态会贯穿整个应用程序吗?
  • 是的,我正在将 AngulureFireAuth 注入根模块。
  • 在这种情况下是的,我们整个应用的状态都是一样的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多