0

J'essaie de configurer un système d'administration dans une application pour limiter l'accès à certaines zones de l'application. C'est assez basique et crée juste un nouvel objet dans Firebase avec les informations ci-dessous. Admin est défini sur false par défaut et je le mettrai à jour manuellement à true car il y en aura très peu à gérer.Firebase, avec Angular & Nativescript - Obtention d'une valeur affectée par l'utilisateur depuis la base de données

enter image description here

Voici ma fonction de connexion

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; 
     }); 
    } 

Le console.log (this.userDetails) est l'impression [objet objet] sur la console.

Heres l'appel de service

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); 
      }); 
     }; 
    }); 
    } 

Alors, quelle est la façon la plus efficace de gérer ce que je suis en train de faire? Désolé si c'est une mauvaise question, j'utilise normalement AngularFire auth et n'ai presque aucune autre expérience que celle-ci avec firebase régulière.

Répondre

1

envisager l'aide personnalisée prétend contrôler l'accès et affecter des utilisateurs avec des privilèges d'administrateur: https://firebase.google.com/docs/auth/admin/custom-claims

Tant que vous connaissez le uid ou e-mail d'un utilisateur admin, vous pouvez définir cet utilisateur comme administrateur, en utilisant l'administrateur SDK . C'est juste un appel d'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. 
}); 

vous force alors un rafraîchissement jeton sur l'utilisateur, obtenir le jeton et l'analyse syntaxique en utilisant (la demande supplémentaire que vous définissez sur cet utilisateur se propagerait à son jeton): https://firebase.google.com/docs/auth/admin/custom-claims#access_custom_claims_on_the_client Vous pouvez ensuite naviguer dans votre utilisateur en conséquence en fonction de la valeur de la réclamation (admin: true).