警告:我对一般代码和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,现在它是“欢迎测试!”那是我数据库中的一个分支,我引用了一个不同的函数,但我认为那不会有所作为。
答案 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
}
感谢您的所有帮助!我认为现在我已经过了这个难关,无法以更多的知识继续进行编码!