ошибка: AngularFireDatabase, @ angular / fire / database-deprecated проблема - PullRequest
0 голосов
/ 25 января 2019

Невозможно реализовать защиту маршрутизатора для администратора.В базе данных 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.На основании этих данных я должен ориентироваться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...