首页 > 解决方案 > iOS Swift - Virgil Security 用户已注册 - 未找到私钥

问题描述

语境

在对“Alice”进行身份验证并获取 JWT 令牌之后使用 Virgil Security SDK for iOS swift 时,在注册时总是会出现错误提示用户已经注册。即使在清除设备或使用新设备后,这也会在首次登录时发生。此外,在尝试eThree.authEncrypt()文本方法时,错误总是指出在设备上找不到私钥,即使eThree.hasPrivateKey()返回 true。

代码尝试

        do {
            let params = try EThreeParams(identity: "Alice", tokenCallback: self.virgil.authWithVirgil)
            let ethree = try EThree(params: params)

            ethree.register { error in
                guard error == nil else {
                    // Error handling here
                    print(error?.localizedDescription) //User is already registered
                    return
                }
                print("New Registration")
                // User private key loaded, ready to end-to-end encrypt!
            }

        } catch {
            print(error.localizedDescription)
        }

问题

标签: encryptionprivate-key

解决方案


第一季度

为什么在清除设备或使用新设备后,代码会告诉我用户已经注册?

简短回答:已清除的设备或新设备中没有本地私钥。

来自官方文档

EThree.register() 函数检查用户是否已经拥有保存在本地存储中的私钥,以及在 Virgil Cloud 上发布的公钥。如果用户没有它们,该函数会为用户生成一个新的密钥对,将私钥保存在本地......

第二季度

为什么hasPrivateKey返回 true 但是在使用时authEncrypt出现错误,说设备中没有私钥?

LocalKeyStorage.retrieveKeyPair()可用于定义私钥存在。

最佳实践

为了支持跨多设备登录,可以使用密钥备份机制。


推荐阅读