如何获得当前经过身份验证的用户angularfire2(角度),以便它可以及时用于类方法?

时间:2017-10-17 18:56:38

标签: angular angularfire2

我有很多方法需要currentUserId。 我一直在注入我的AuthService来获取和存储用户,如下所示:

// AuthService代码

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

// Feed组件代码

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

    }

问题:每个方法都必须这样做。在angularjs中,我记得我相信使用解决方法来帮助解决这个问题。

问题:是否有一种'app global'方式来获取和存储当前经过身份验证的用户的信息,以便在调用组件或注入服务中的方法时它已存在?

1 个答案:

答案 0 :(得分:0)

走向角度gitter,并被告知我正在做的可观察链确实是使用的模式。我稍微修改了它,并将重构在服务与组件中使用它。

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