iOS链接两个firebase帐户错误

时间:2017-10-29 14:17:47

标签: ios swift firebase firebase-authentication

我正在尝试关联两个firebase帐户

匿名帐户(prevUser)的电话帐户(已登录)

这是我的代码

    func verifyCode()  {

      let credential = PhoneAuthProvider.provider().credential(
        withVerificationID: self.verificationID,
        verificationCode: phoneCode.text!)


      let prevUser = Auth.auth().currentUser!

      Auth.auth().signIn(with: credential) { (user, error) in
        if let error = error {
            print("1 something went wrong : ", error.localizedDescription)
            return
        }

        print("the user ID is : " , user!.uid)

        prevUser.link(with: credential, completion: { (user, error) in
            if let error = error {
                print("something went wrong : ", error.localizedDescription)
                return
            }


        })
      }

    }

我总是得到同样的错误

something went wrong :  The SMS code has expired. Please re-send the verification 
code to try again.

提前致谢

2 个答案:

答案 0 :(得分:0)

这里有两个问题:

  1. 您首先使用手机身份验证凭据登录,然后链接到包含相同基础SMS代码的同一凭证,该代码是一次性代码。由于Firebase Auth后端只能使用一次代码(它会在第一次使用时立即到期),因此这将始终因您所获得的错误而失败。

  2. 即使代码可以多次使用,也不能让多个用户拥有相同的手机凭据。您首先使用该凭据登录一个用户,然后尝试将其链接到另一个用户。这将始终失败,并且凭据已存在于另一个帐户中。

答案 1 :(得分:0)

步骤1:您可以通过提供电话号码字符串来验证电话号码,完成后您将收到验证ID和错误(如果有)。

func verifyPhoneNumber(withPhoneNo phoneNo:String, completion: @escaping (_ error: Error?, _ verificationID: String?)->Void) {
    PhoneAuthProvider.provider().verifyPhoneNumber(phoneNo) { (verificationID, error) in
        if let error = error {
            print(error.localizedDescription)
            completion(error, verificationID)
        } else {
            print(verificationID ?? "no id provided")
            completion(nil, verificationID)
        }

    }
}

步骤2:通过提供当前用户,6位验证码,从前一功能获得的验证ID,将电话号码链接到当前用户。 完成后,如果有错误,将返回错误。

func linkPhoneNumber(withUser user: User, verificationCode: String, verificationID id: String, completion: @escaping (_ error: Error?)-> Void) {
    let credential = PhoneAuthProvider.provider().credential(withVerificationID: id, verificationCode: verificationCode)
    user.link(with: credential) { (user, error) in
        if let error = error {
            print(error.localizedDescription)
            completion(error)
        } else {
            print(user!.uid)
            completion(nil)
        }
    }
}