2017-10-17 3 views
0

J'ai de nombreuses méthodes qui nécessitent le currentUserId. J'ai injectait la ma AuthService obtenir et stocker l'utilisateur comme ceci:Comment obtenir l'utilisateur actuel authentifié angularfire2 (angulaire) afin qu'il soit utilisable à temps pour les méthodes de classe?

// Code AuthService

getAuthorizationState() { 
    return this.afAuth.authState; 
} 

// Flux code des composants

constructor(...auth: AuthService...) { 
    this.user = this.auth.getAthorizationState(); 
    this.user.subscribe(
     (value) => { 
      console.log('value', value); 
      this.currentUser = value; 
     } 
    ); 
} 

// This tends to throw an error can not get property uid of undefined 
getUserFeed(uri: string): Obervable<any> { 
    return this.getFeed(`feed/${this.currentUser.uid})`) 
} 

// So have been resorting to this 
getUserFeed(uri: string): Obervable<any> { 
    this.user.map((user) => {return user.uid}) 
     .flatMap((currentUserId) => { 
      return this.getFeed(`feed/${currentUserId})`) 
     }); 

    } 

Problème: Been d'avoir à fais cela avec everymethod. Dans angularjs je me souviens que je croyais en utilisant la méthode de résolution pour aider à ce problème.

Question: Existe-t-il un moyen 'app global' d'obtenir et de stocker les informations de l'utilisateur authentifié actuel afin qu'il soit déjà présent lors de l'appel d'une méthode dans un composant ou un service injecteur?

Répondre

0

Je suis allé sur gitter angulaire et on m'a dit que la chaîne observable que je faisais était en effet le modèle à utiliser. Je l'ai légèrement modifié et refactorisé pour l'utiliser dans le service vs le composant.

getHomeFeedPostsWrapper(): Observable<any> { 
    return getUserId().map((user) => { 
     return user.uid; 
    }).switchMap((userId) => { 
     return this.friendly.getHomeFeedPosts(userId); 
    }); 
} 


/** 
* Helper methods 
*/ 

getUserId() { 
    return this.auth.getAuthState().map((user) => { 
     return user.uid; 
    }); 
}