【问题标题】:AngularFire2: Notify Sign-out Across Multiple Browser TabsAngularFire2:跨多个浏览器选项卡通知注销
【发布时间】:2018-09-05 14:22:40
【问题描述】:

我正在开发一个连接到 Firebase 的 Angular 应用程序。如果我在浏览器中有 2 个应用程序实例并从其中一个注销,我如何通知另一个实例用户不再经过身份验证并且应该取消订阅 Firebase。

我提供了一个 stackblitz 订阅 Firebase 的真实实例。单击sign in 时,它会登录并获取文档。这会重新创建场景,但由于它仅在控制台上输出日志,因此在实际项目中仍然无法按预期工作。

Stackblitz. To recreate, open 2 instances of it, sign in one of them and signout.

【问题讨论】:

  • 你的 do 触发并且“signout”被打印到控制台。所以它正在工作。你有什么问题?
  • @RobinDijkhof 在 stackblitz 示例中,它确实会在控制台上触发“注销”,但在我的项目中,当从浏览器上的一个实例注销时,它会取消订阅 firebase。但是另一个实例仍然被订阅并引发错误,因为它不再经过身份验证。第二个实例不会被通知第一个实例已经注销和取消订阅。所以我的问题是,我如何也取消订阅应用程序的第二个实例,不会导致致命错误。

标签: angular firebase firebase-authentication angularfire2


【解决方案1】:

我不确定这是否是您需要的,因为我无法重现该错误。虽然还是发了。

export class SomeComponentOrService{
    private subscription: Subscription;

    constructor(private afAuth: AngularFireAuth){
        this.subscription = afAuth.subscribe(res => {
            if(isNullOrUndefined(res){
                this.subscription.unsubscribe();
            }
        });
    }
}

【讨论】:

    【解决方案2】:

    添加另一个可能是问题的答案。

    this.afAuth.auth.signOut();
    

    auth 是当前状态。如果用户已注销,则当前状态可能为 null。一个简单的空检查可能会修复您的错误。

    if(!isNullOrUndefined(this.afAuth.auth){
        this.afAuth.auth.signOut();
    }
    

    【讨论】:

      猜你喜欢
      • 2016-02-23
      • 1970-01-01
      • 2014-03-08
      • 1970-01-01
      • 1970-01-01
      • 2019-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多