0

我試圖在應用程序中設置管理系統以限制對應用程序某些區域的訪問。這是非常基本的,只是用下面的信息在firebase中創建一個新對象。 Admin默認設置爲false,我將手動將其更新爲true,因爲將很少處理。Firebase,帶有Angular&Nativescript - 從數據庫獲取用戶分配的值

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)是印刷[對象對象]到控制檯。

繼承人的服務呼叫

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身份驗證,除了常規的Firebase之外,幾乎沒有任何經驗。

回答

1

考慮使用自定義聲明來控制訪問,並與管理員權限用戶分配: https://firebase.google.com/docs/auth/admin/custom-claims

只要你知道管理員用戶的UID或電子郵件,您可以設置用戶的管理,使用管理SDK 。這只是一個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)。

相關問題