用于创建电话身份验证凭证的验证ID无效

时间:2020-08-18 13:29:48

标签: ios swift firebase-authentication

我无法登录,总是看到此错误消息:

用于创建电话身份验证凭证的验证ID无效

我试图添加我的手机,例如测试仪,但没有成功。 在Firebase控制台中启用了登录方法。

我发现了相同的问题here,但没有答案。 我使用了firebase's docs. 请帮我弄清楚。

这是我的代码:

func verifyPhone(_ phone: String) -> AsyncTask<String?> {
    return AsyncTask<String?>({ observer, lifetime in
        guard !lifetime.hasEnded else {
            observer.sendInterrupted()
            return
        }
        Auth.auth().languageCode = "ua"
        PhoneAuthProvider.provider().verifyPhoneNumber(phone, uiDelegate: nil) { verificationID, error in
            if let error = error {
                observer.send(error: AppError(error))
                return
            }
            observer.send(value: verificationID)
            observer.sendCompleted()
        }
    })
}

func signInViaPhoneNumber(usingCode smsCode: String) -> AsyncTask<Void> {
    return AsyncTask<Void>({ observer, lifetime in
        guard !lifetime.hasEnded else {
            observer.sendInterrupted()
            return
        }
        guard let verificationCode = UserDefaultsStorage.verificationCode else {
            observer.send(error: AppError.logic("Відсутній код верифікації"))
            return
        }
        
        let credential = PhoneAuthProvider.provider().credential(withVerificationID: smsCode,
                                                                 verificationCode: verificationCode)
        Auth.auth().signIn(with: credential) { result, error in
            if let error = error {
                observer.send(error: AppError(error))
                return
            }
            
            guard let firUser = result?.user else {
                observer.send(error: AppError.logic("Відсутній юзер"))
                return
            }
            let factory: ModelFactory = ModelFactoryImpl()
            let appUser = factory.makeUser(id: firUser.uid, name: firUser.displayName ?? "", phone: firUser.phoneNumber ?? "")
            AppService.shared.user = appUser
            observer.send(value: ())
            observer.sendCompleted()
        }
    })
}

1 个答案:

答案 0 :(得分:1)

我很难看到完整的代码流,因为您正在使用AsyncTask并将所有结果委托给外部。 代码中弹出的问题是该行

PhoneAuthProvider.provider().credential(withVerificationID: smsCode,
                                                                 verificationCode: verificationCode)

在这种方法中,VerificationCode应该是您通过SMS收到的代码,withVerificationID应该是您在verifyPhoneNumber回调中获得的VerificationId。