angular - 无法使用具有来自 firebase 角色的 Angular AuthGuard
问题描述
我尝试创建一个 Guard,它应该检查用户是否具有管理员角色。
为此,我在 Cloud Firestore 中有一个布尔值 (admin = true | false)。
当我尝试检查当前用户是否是管理员时,我收到以下错误消息:
找不到模块:错误:无法解析“rxjs/add/operator/map”
我的 admin-guard.ts
@Injectable()
export class AdminAuthGuard implements CanActivate {
constructor(private auth: AuthService) {}
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> {
return this.auth.user$.pipe(
take(1),
map(user => user && user.admin ? true : false),
tap(isAdmin => {
if (!isAdmin) {
console.error('Access denied - Admins only');
}
})
);
}
}
我的 auth.service.ts
@Injectable()
export class AuthService {
user$: Observable<AppUser>;
constructor(private afAuth: AngularFireAuth,
private afs: AngularFirestore) {
this.user$ = this.afAuth.authState.pipe(switchMap(user => {
if (user) {
return this.afs.doc<AppUser>(`users/${user.uid}`).valueChanges();
} else {
return of(null);
}
}));
}
}
我的用户界面:
export interface AppUser {
uid: string;
email: string;
admin?: boolean;
}
如果有人能给我一个关于如何解决这个问题的提示,那就太好了。谢谢!
解决方案
我可以通过删除 import 'rxjs/add/operator/map' 并使用 import {map} from 'rxjs/operators' 来解决问题;
推荐阅读
- jmeter - 如何让 Jmeter 每次登录只使用一次
- ringcentral - 如何满足 RingCentral 应用毕业过程中的“media/message-store”API 调用要求?
- excel - 运行 VBA 字符串以删除唯一重复项时出现运行时错误
- pickle - pickle 如何在 python 对象上保留方法?
- javascript - 数据未从 Vue.js 中的子组件发送到父组件
- css - 使用 vuetify、flexbox 和列表进行自动换行
- python - django URLconfig 的问题没有找到我设置的 URL 模式
- reactjs - 仅在移动浏览器上出现 tensorflow.js 和 reactjs 错误
- c++ - 使用 XCode 打开 C++ 框架
- reactjs - 初学者反应项目,npm start 不工作