我正在用Firebase身份验证和dotnet核心后端编写一个有角度的应用程序。我正在尝试创建一个服务,以便我可以跟踪firebase uid并跟踪用户是否是管理员(从后端服务器获取)。我可以毫无问题地从firebase成功获取uid,但是当我尝试从api中获取用户对象时,控制台出现错误。
这是我的用户服务代码:
export class UserService {
uid = this.afAuth.authState.pipe(
map(authState => {
return !authState ? null : authState.uid;
})
);
isAdmin = this.uid.pipe(
switchMap(uid => {
if (uid) {
console.log("there is a uid")
this.httpClient.get<User>("https://localhost:44337/api/users/" + uid).subscribe(data => {
console.log(data.isAdmin); // prints 'true'
return observableOf(data.isAdmin);
});
} else {
return observableOf(false);
}
})
);
constructor(
private afAuth: AngularFireAuth,
private httpClient: HttpClient) { }
}
答案 0 :(得分:1)
在switchMap运算符中,您不应直接订阅可观察对象。您应该返回observable,switchMap运算符将为您处理订阅。
switchMap(uid => {
if (uid) {
console.log("there is a uid")
return this.httpClient.get<User>("https://localhost:44337/api/users/" + uid).pipe(map(data => {
console.log(data.isAdmin); // prints 'true'
return data.isAdmin
}));
} else {
return of(false);
}
})