Firebase,Angular& Nativescript - 从数据库获取用户分配的值

时间:2017-10-08 08:01:06

标签: angular firebase firebase-realtime-database firebase-authentication angular2-nativescript

我正在尝试在应用中设置管理系统,以限制对应用程序某些区域的访问。它非常基本,只需在firebase中创建一个具有以下信息的新对象。默认情况下Admin设置为false,我会手动将其更新为true,因为很少有人可以处理。

enter image description here

这是我的登录功能

login() {
  this.firebaseService.login(this.user)
      .then(() => {
          this.isAuthenticating = false;
          console.log(this.user.email);
          this.userDetails = <any>this.firebaseService.getUserInfo();
          console.log(this.userDetails);
          this.userDetails.subscribe(users => {
            if(users.user.admin) {
                console.log('yes');
                this.routerExtensions.navigate(["/admin"], { clearHistory: true } );
            }
            else {
                console.log('no');
                this.routerExtensions.navigate(["/"], { clearHistory: true } );
            }
          });
      })
      .catch((message:any) => {
          this.isAuthenticating = false;
      });
  }

console.log(this.userDetails)正在将[Object object]打印到控制台。

接下来是服务电话

 getUserInfo(): Observable<any> {
  return new Observable((observer: any) => {
     let path = "/Users/"+ BackendService.token;

      let onValueEvent = (snapshot: any) => {
          this.ngZone.run(() => {
              let results = this.handleSnapshot(snapshot.value);
              console.log(JSON.stringify(results));
              observer.next(results);
          });
      };
  });
  }

那么处理我想要做的事情的最有效方法是什么?对不起,如果这是一个糟糕的问题,我通常使用AngularFire auth,并且几乎没有使用常规firebase的经验。

1 个答案:

答案 0 :(得分:1)

考虑使用自定义声明来控制访问权限并为用户分配管理员权限: https://firebase.google.com/docs/auth/admin/custom-claims

只要您知道管理员用户的uid或电子邮件,就可以使用admin SDK将该用户设置为admin。它只是一个API调用。

admin.auth().setCustomUserClaims(uid, {admin: true}).then(() => {
  // The new custom claims will propagate to the user's ID token the
  // next time a new one is issued.
});

然后强制对用户进行令牌刷新,获取令牌并使用解析(您在该用户上设置的附加声明将传播到其令牌): https://firebase.google.com/docs/auth/admin/custom-claims#access_custom_claims_on_the_client 然后,您可以根据声明值(admin:true)相应地导航您的用户。