【问题标题】:Firebase iOS not receiving events after re-auth with JWTFirebase iOS 在使用 JWT 重新认证后未收到事件
【发布时间】:2016-03-20 16:31:32
【问题描述】:

我正在使用 Firebase iOS SDK,我的部分应用体验是群聊。我为每个群聊设置了一个类,并存储了对 firebase 对象的引用,如下所示:

self.firebaseMessages = [[Firebase alloc] initWithUrl:[NSString stringWithFormat:@"%@/Message/%@", FIREBASE_URL, chat.objectId]];

然后我观察我感兴趣的每个事件。这非常有效。我将自定义身份验证与 JWT 一起使用,我的问题是令牌过期或用户注销/登录并重新身份验证时。那时,除非我完全重新启动我的应用程序,否则回调会停止为我正在观察的事件触发。我知道重新验证成功,因为我在 AuthEventWithBlock 中获得了成功回调和 authdata。当我设置值时,数据库更新和其他客户端接收这些更新。只是重新授权的客户端不再接收更新。

我已经简化了我的安全规则以消除这种可能性:

"Message": {
      "$message": {
        ".read": "auth != null",
        ".write": "auth != null"
      }
    }

我在根 URL 上重新验证:

 Firebase *ref = [[Firebase alloc] initWithUrl:FIREBASE_URL];
    [ref authWithCustomToken:responseObject[@"auth_token"] withCompletionBlock:^(NSError *error, FAuthData *authData) {

我也尝试过对每个消息 URL 进行重新验证。还尝试重新实例化我的所有 Firebase 对象。

另外请注意,我在根目录上使用 [ref unauth] 来注销用户并模拟令牌过期。

我错过了什么?

【问题讨论】:

  • 我想您的听众在失去身份验证后被取消(不可能用如此简洁的代码来验证这一点)。您可以通过添加取消块并记录发生的取消错误来验证这一点。重新认证后需要重新建立监听器。
  • 如果侦听器因失去身份验证而被取消,这是有道理的。我没有意识到这一点。显然,如果我重新实例化 Firebase 对象,它们无论如何都会消失 - 所以这对我来说是一个过度的网站。我确信重新建立听众会解决问题,所以我会试一试。谢谢。

标签: ios firebase


【解决方案1】:

加藤的评论是解决方案。 如果您失去身份验证并重新授权,请确保重新建立事件侦听器。

当重新建立侦听器时,所有数据也将流回,这也毫无价值。如果您在从这些听众流式传输数据的屏幕上(例如群聊),您可能会收到已经显示的数据。不过,处理起来很容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    相关资源
    最近更新 更多