无法为管理员实施路由器保护。在Firebase数据库中,我要添加与应用程序相关的属性'isAdmin:true'。当我尝试检索那些应用程序数据时,我在CanActivate中遇到错误,例如“错误地实现CanActivate接口”。
我正在使用
FirebaseObject可从'@ angular / fire / database弃用的版本中观察到。 b因为我不知道如何使用AngularFireObject(user.service.ts)
从Rxjs切换到MapMap并在firebase(AdminGuard.ts)中检索与应用程序相关的数据。错误:CanActivate错误地实现了Interface。一切看起来都很好,我不知道代码是怎么回事。
在浏览器控制台中。
错误错误:StaticInjectorError(AppModule)[UserService-> AngularFireDatabase]:StaticInjectorError(平台: 核心)[UserService-> AngularFireDatabase]: NullInjectorError:AngularFireDatabase没有提供程序! 在NullInjector.push ../ node_modules/@angular/core/fesm5/core.js.NullInjector.get (core.js:717) 在resolveToken(core.js:954) 在tryResolveToken(core.js:898) 在StaticInjector.push ../ node_modules/@angular/core/fesm5/core.js.StaticInjector.get (core.js:795) 在resolveToken(core.js:954) 在tryResolveToken(core.js:898) 在StaticInjector.push ../ node_modules/@angular/core/fesm5/core.js.StaticInjector.get (core.js:795) 在resolveNgModuleDep(core.js:17656) 在_createClass(core.js:17701)
我尝试使用 AngularFireObject 。但是我不知道如何使用它来检索与应用程序相关的数据。这就是为什么我使用一个不推荐使用的FirebaseObjectObservable。我已经安装了最新的。不推荐使用此FirebasaeObjectObservable。
AdminGuard.ts
import { UserService } from './user.service';
import { AuthService } from './auth.service';
import { Injectable } from '@angular/core';
import { CanActivate } from '@angular/router';
import 'rxjs/add/operator/switchMap';
import 'rxjs/add/operator/map';
import { Observable } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class Adminguard implements CanActivate{
constructor(private auth:AuthService, private userService: UserService){}
CanActivate(): Observable<boolean>{
return this.auth.user$
.switchMap(user => this.userService.get(user.uid))
.map(appUser => appUser.isAdmin);
}
}
user.service.ts
import { AngularFireDatabase, FirebaseObjectObservable } from '@angular/fire/database-deprecated';
import { Injectable } from '@angular/core';
import * as firebase from 'firebase';
import { AppUser } from './models/app-user';
@Injectable({
providedIn: 'root'
})
export class UserService {
constructor(private db: AngularFireDatabase) { }
save(user: firebase.User){
this.db.object('/users/'+ user.uid).update({
name: user.displayName,
email: user.email
})
}
get(uid: string) : FirebaseObjectObservable<AppUser>{
return this.db.object('/users/' + uid);
}
}
appuser.ts
export interface AppUser{
name : string,
email: string,
isAdmin: boolean
}
我希望通过检索在Firebase中手动创建的应用程序数据来成功实现路由器防护。基于这些数据,我必须进行导航。