Невозможно реализовать защиту маршрутизатора для администратора.В базе данных Firebase я добавляю связанное с приложением свойство isAdmin: true.Когда я пытаюсь получить эти данные приложения, в CanActivate появляется сообщение об ошибке: «Неправильно реализован интерфейс CanActivate».
Я использую
FirebaseObjectObservable из '@ angular / fire /базы данных устарела.Потому что я не знаю, как работать с AngularFireObject (user.service.ts)
SwitchMap и Map из Rxjs для извлечения связанных с приложением данных в firebase (AdminGuard.ts). Ошибка: CanActivate Неправильно реализуетИнтерфейс.Все выглядит хорошо, я не знаю, что происходит с кодом.
В консоли браузера.
Ошибка: Ошибка StaticInjectorError (AppModule) [UserService -> AngularFireDatabase]: StaticInjectorError (Платформа: core) [UserService -> AngularFireDatabase]: NullInjectorError: Нет поставщика для AngularFireDatabase!в NullInjector.push ../ node_modules/@angular/core/fesm5/core.js.NullInjector.get (core.js: 717) в resolToken (core.js: 954) в tryResolveToken (core.js: 898) в StaticInjector.push ../ node_modules/@angular/core/fesm5/core.js.StaticInjector.get (core.js: 795) в resolToken (core.js: 954) в tryResolveToken (core.js: 898) в StaticInjector.push../node_modules/@angular/core/fesm5/core.js.StaticInjector.get (core.js: 795) в resolNgModuleDep (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.На основании этих данных я должен ориентироваться.