代码之家  ›  专栏  ›  技术社区  ›  PvDev

在ios swift中使用云firestore进行电话身份验证?

  •  8
  • PvDev  · 技术社区  · 8 年前

    firebase database image here

    phone authentication login user image here

    firebase database user phone number repeated with same user uid image here

    在我的应用程序中,我使用电话身份验证进行登录,并将用户登录的用户电话号码和uid存储在数据库中。当使用现有用户电话号码登录时,它会创建具有相同uid和电话号码的新文档id,您可以查看图像1和3。

    这是我用来登录的代码,如果用户存在,意味着它应该检查并导航到主控制器,否则请签署用户详细信息控制器。

         @IBAction func loginbtn(_ sender: UIButton) {
    
        let defaults = UserDefaults.standard
        let credential: PhoneAuthCredential = PhoneAuthProvider.provider().credential(withVerificationID: defaults.string(forKey: "authVID")!,
                                                                                      verificationCode: otpText.text!)
        Auth.auth().signIn(with: credential)
        {
            (user, error) in
            if error != nil
            {
                print("error: \(String(describing: error?.localizedDescription))")
            }
            else if user != nil
            {
    
    
                print("Phone number: \(String(describing: user?.phoneNumber))")
                let userInfo = user?.providerData[0]
                print("Provider ID: \(String(describing: userInfo?.providerID))")
    
                let currentUser = Auth.auth().currentUser?.uid
                var ref: DocumentReference? = nil
    
    
                ref = self.db.collection("Users").addDocument(data: [
                                        "phoneNumber"   : user?.phoneNumber as Any,
                                        "UID"           : user?.uid as Any
    
                                    ]) { err in
                                        if let err = err {
    
                                            print("Error adding document: \(err)")
    
                                        } else {
    
                                            print("Document added with ID: \(ref!.documentID)")
    
                                        }
                                    }
    
                let storyboard = UIStoryboard(name: "Main", bundle: nil)
                let controller = storyboard.instantiateViewController(withIdentifier: "HomeViewController")
                self.present(controller, animated: true, completion: nil)
    
    
            } else {
    
    
    
    
                }
    
    
            }
    
        }
    

    有谁能帮我摆脱这一切,我几乎在挣扎过去的一天!!!

    2 回复  |  直到 8 年前
        1
  •  4
  •   Gerardo    8 年前

    您正在调用函数“add”,该函数创建一个新文档,分配一个自动生成的ID,如上所述 here 。 相反,您需要使用用户的uid作为键调用函数“set”,如下所示:

    db.collection("users").doc(uid).set... 
    
        2
  •  3
  •   Moritz Gruber    8 年前

    您还可以使用firebase生成的UID。 你已经有了那句台词,但还没有用过:

    let currentUser = Auth.auth().currentUser?.uid
    

    因此,尝试替换 "UID": user?.uid as Any 具有 "UID": currentUser as Any

    推荐文章