You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在其他已登录设备上检测Realm应用用户已被删除?

检测Realm应用用户在其他设备上是否被删除的解决方案

Realm的isLoggedIn方法仅反映本地缓存的用户状态,不会主动同步服务器端的用户删除状态,所以会出现你遇到的问题。以下是几种可行的检测方案:

  • 主动刷新用户数据验证状态
    调用refreshCustomData()方法向服务器请求最新的用户信息,该操作会触发服务器端的身份校验。如果用户已被删除,服务器会返回认证错误,此时即可捕获异常并处理登出逻辑:

    do {
        try await RealmApp.shared.currentUser?.refreshCustomData()
        // 刷新成功,用户账号仍有效
    } catch {
        // 刷新失败,判定用户已被删除,执行登出
        RealmApp.shared.currentUser?.logOut()
        // 这里可以添加UI提示或状态重置逻辑
    }
    
  • 在数据操作中捕获认证错误
    用户被删除后,后续的同步操作(如数据上传)最终会触发服务器的认证拦截。在数据操作的错误处理中监听认证相关的错误码(如invalidSession、authenticationFailed),一旦触发就验证用户状态:

    do {
        try realm.write {
            // 执行数据写入/上传操作
        }
    } catch let error as Realm.Error {
        switch error.code {
        case .invalidSession, .authenticationFailed:
            // 会话失效或认证失败,尝试刷新用户状态
            do {
                try await RealmApp.shared.currentUser?.refreshCustomData()
            } catch {
                RealmApp.shared.currentUser?.logOut()
            }
        default:
            // 处理其他错误
            break
        }
    }
    
  • 定时轮询验证用户状态
    如果需要相对实时的状态同步,可以设置一个低频率的定时器(比如每5-10分钟一次),定期调用refreshCustomData()检查用户状态。注意不要设置过短的间隔,避免增加服务器负载和消耗设备资源。

  • 监听同步会话的错误通知
    为Realm同步会话添加错误监听,当出现会话无效类的错误时,直接判定用户身份失效并执行登出:

    guard let user = RealmApp.shared.currentUser else { return }
    let config = user.configuration(partitionValue: "你的分区值")
    let realm = try Realm(configuration: config)
    realm.syncSession?.addErrorNotificationBlock { _, error in
        if let syncError = error as? SyncError, 
           syncError.code == .invalidSession || syncError.code == .userNotFound {
            user.logOut()
            // 更新本地状态或提示用户
        }
    }
    

内容的提问来源于stack exchange,提问作者XYZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 13:15:39