当前用户的UID与验证的UID不同吗?

时间:2018-08-17 02:39:55

标签: swift xcode firebase firebase-realtime-database firebase-authentication

警告:我对一般代码和xcode还是很陌生

运行Xcode 8.2

无论如何,所以我已经保存了用户的身份验证详细信息,电子邮件密码。然后将它们保存在user / currentUser.UID下,并提供用户名和电子邮件。我想检索用户名并将其作为标签文本输入,但是UID是不同的?!

通过数据库获取用户名并将标签设置为用户名

@IBOutlet weak var welcomeHomeUsername: UILabel!

func welcomeHomeAddUsername() {


    guard let uid12 = Auth.auth().currentUser?.uid else {
        return
    }

    print("User ID post guard: \(uid12)")

    ref.child("users").child(uid12).child("username").observeSingleEvent(of: .value, with: { snapshotWelcome in

        print(snapshotWelcome)
        let welcomeHomeUser = snapshotWelcome.value as? String
        self.welcomeHomeUsername.text = welcomeHomeUser

    })

}

然后这是允许用户使用firebase auth进行注册,然后将用户名和电子邮件值保存在/ users /(uid)/

中的代码
@IBAction func signUpButton(_ sender: Any)
{


    //Authenticate User//
    Auth.auth().createUser(withEmail: emailTextField.text!, password: passwordTextField.text!) { (user, error) in

        if user != nil {
            print("User Created")
                self.performSegue(withIdentifier: "backLogin", sender: self)
        }
        else {
            print("error no seg")
        }
    }
    //Successfully Authenticated User//




    guard let uid = Auth.auth().currentUser?.uid else {
        return
    }



    //Add User to Database//
    let ref = Database.database().reference(fromURL: "~~~My Database URL~~~")
    let usersReference = ref.child("users").child(uid)
    let values = ["username": usernameTextField.text, "email": emailTextField.text]
    usersReference.updateChildValues(values) { (err, ref) in

        if err != nil {
            print("error no user created")
        }

        if (Auth.auth().currentUser != nil){
            print("user id: " + (Auth.auth().currentUser?.uid)!);
            return
        }
        print("Saved user succesfully into Firebase DB")


    }


}

然后在控制台输出中

    user id: mrsIBAAl2LVb7FetVxnMwBtMJ562

    User ID post guard: 0QkYbdPdH7QdZsdRjck53l4Ekrk2
    Snap (message1) Welcome to the Beta!
    Snap (username) <null>

我还有一个函数可以获取MOTD,现在它是“欢迎测试!”那是我数据库中的一个分支,我引用了一个不同的函数,但我认为那不会有所作为。

1 个答案:

答案 0 :(得分:0)

EUREKA! 我发现了问题!

当我发现数据库中的UID是过去的身份验证UID时,我仔细查看了注册流程并测试了它的不同部分,因此当制作了新的身份验证UID时,出现了旧的身份验证UID在数据库中。我使用控制台打印检查了整个流程,发现在数据库记录用户之后,正在对用户进行身份验证和创建!因此,要解决此问题,我将身份验证放入自己的函数中,然后在对用户进行身份验证之后,我调用了将用户添加到数据库中的函数,此方法就起作用了!

@IBAction func signUpButton(_ sender: Any)
{

    signupTrue = 0
    print(signupTrue)

    let ref3 = Database.database().reference()

    ref3.child("schools").observeSingleEvent(of: .value, with: { (snapshot) in

        if snapshot.hasChild(self.schoolNameTextfield.text!){
            print("true school exist")
            signupTrue = 1
            print(signupTrue)

            self.authUserFunc()

        }
        else {
            print("false school doesn't exist")
            signupTrue = 2
            print(signupTrue)
        }
    })
    print("Test ending ref3")
}



func authUserFunc() {

    //Authenticate User//
    Auth.auth().createUser(withEmail: emailTextField.text!, password: passwordTextField.text!) { (user, error) in

        if user != nil {
            print("User Created")
            self.performSegue(withIdentifier: "backLogin", sender: self)
            self.addToDatabase()
        }
        else {
            print("error no seg")
        }
    }
    //Successfully Authenticated User//

}




func addToDatabase() {
    print("Starting add to database")
        print("starting signup")


        //Add User to School Database//
        let ref = Database.database().reference(fromURL: "~~~My Database URL~~~")
        let userSchoolReference = ref.child("schools").child(schoolNameTextfield.text!).child("users").child("\(Auth.auth().currentUser!.uid)")
        let values = ["username": usernameTextField.text!, "email": emailTextField.text!]
        userSchoolReference.updateChildValues(values) { (err, ref) in


            if err != nil {
                print("error no school user created")
            }

            if (Auth.auth().currentUser != nil){
                print("Saved user succesfully into School Firebase DB")
                //print("user id: " + (Auth.auth().currentUser?.uid)!);
                return
            }
        }



        //add user to users file//
        //let userReference = ref.child("users").child("\(Auth.auth().currentUser!.uid)")
        let values2 = ["username": usernameTextField.text!, "email": emailTextField.text!, "password": passwordTextField.text!]


    Database.database().reference().child("users").child("\(Auth.auth().currentUser!.uid)").updateChildValues(values2) { (err, ref) in
        if err != nil{
            print("Error no user created")
            return
        }
    }

    print("\(Auth.auth().currentUser?.uid)")

//end func addToDatabase
}

感谢您的所有帮助!我认为现在我已经过了这个难关,无法以更多的知识继续进行编码!