错误:AngularFireDatabase,@ angular / fire / database已弃用的问题

时间:2019-01-25 09:35:08

标签: firebase firebase-realtime-database angular7

无法为管理员实施路由器保护。在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中手动创建的应用程序数据来成功实现路由器防护。基于这些数据,我必须进行导航。

0 个答案:

没有答案