angular - 注销时如何摆脱 "Error: permission_denied"? ( Angular -Firebase)

标签 angular firebase firebase-authentication logout permission-denied


您好,我是 Angular 和 Firebase 的新手,对下一个问题感到困惑:

我有两个组件 -
授权区域(父组件)和文件夹(子组件)。授权区域有一个注销按钮,文件夹可以从 Firebase 访问身份验证数据。问题是,当用户注销时,尽管操作成功,但会出现错误消息,我正在尝试摆脱它。
父组件:授权区域

export class AuthorizedZoneComponent implements OnInit {
  
  constructor(public authService: AuthService) { }
  ngOnInit(): void {}

  //btn logout listener
  logout() { this.authService.logout(); }
}
   <app-folders></app-folders>
   <button id="logout"(click)="logout()">logout</button>`


子组件:文件夹

export interface Folder{
  id:string;
  name:string;
  key: string;
}

//This Component is to be used only by Authorized-zone!
export class FoldersComponent implements OnInit {

  private dbPath='/folders';//path to folders in realtime data base
  private folderArray: Array<Folder>=[];//Array for folders: each folder has id and name

  constructor(private router: Router, private route:ActivatedRoute, private db: AngularFireDatabase) { 
    
    this.db.list(this.dbPath).valueChanges().subscribe(data => {
      for( let i=0; i< data.length; i++){
        this.folderArray.push({id: data[i]["id"], name: data[i]["name"], key: data[i]["key"]});
      }
    })
  }

  ngOnInit(): void {}

  //returns array of folders
  getFolders(){ return this.folderArray;}

  //on folder click listerner
  onSelect(folder){}
}
<div (click)="onSelect(folder)" *ngFor="let folder of getFolders()> 
    <div class="folder" [id]="folder.id">{{folder.name}}</div> 
</div>

auth-service 使用户能够登录和退出


事件的流程似乎运行良好。 但是,当我按下注销按钮时,尽管该功能有效,但我收到控制台错误消息:

ERROR Error: permission_denied at /folders: Client doesn't have permission to access the desired data...

我注意到如果我删除 <app-folders></app-folders>错误不发生。

我尝试删除 <app-folders></app-folders>在authorized-zone.component中注销之前:

//btn logout listener
  logout() {
    document.querySelector('app-folders').replaceWith("");
    this.authService.logout();
  }

它不起作用,如果有人能够解释问题并推荐解决方案,我将非常感激

最佳答案

我找到了解决方案:在文件夹组件中使用 ngOnDestroy。


      private dbData;
    
      constructor(private router: Router, private route:ActivatedRoute, private db: AngularFireDatabase) { 
        
        this.dbData=this.db.list(this.dbPath).valueChanges()
        .subscribe(data => {//...
    
    
        })
      }
    
    
      //destroy firebaseData before logging out
      ngOnDestroy(){
        this.dbData.unsubscribe();
      }

关于angular - 注销时如何摆脱 "Error: permission_denied"? ( Angular -Firebase),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62283995/

相关文章:

javascript - Uncaught Error : [$injector:modulerr] In Firebase Authentication

android - 电子邮件未在 Firebase 中验证

file - Angular2 中静态文件的默认路径是什么?

angular - HostListener onBlur 和 onFocus 没有在 angular4 中被触发

Angular EventEmitter 错误 : Expected 0 type arguments, 但得到 1

firebase - 类型 'Future<dynamic>'不是类型转换中类型 'List<Profile>'的子类型

css - 警报消息没有显示在我所有的 html 组件之上

android - 无法将 APK 上传到 Firebase 测试实验室

cryptography - Firebase 是否使用加密技术?

flutter - Firebase Auth - 有没有办法为新用户预先生成 UID?