我正在尝试关联两个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.
提前致谢
答案 0 :(得分:0)
这里有两个问题:
您首先使用手机身份验证凭据登录,然后链接到包含相同基础SMS代码的同一凭证,该代码是一次性代码。由于Firebase Auth后端只能使用一次代码(它会在第一次使用时立即到期),因此这将始终因您所获得的错误而失败。
即使代码可以多次使用,也不能让多个用户拥有相同的手机凭据。您首先使用该凭据登录一个用户,然后尝试将其链接到另一个用户。这将始终失败,并且凭据已存在于另一个帐户中。
答案 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)
}
}
}