【问题标题】:Authenticated User entry are not saved in Database经过身份验证的用户条目未保存在数据库中
【发布时间】:2018-09-01 01:09:04
【问题描述】:
@objc func registerButtonClicked()
{

//Firebase 配置完成后调用

    guard let email = emailTextField.text else {
        alertBox(title: "Error", message: "All fields are mandatory")
        return }

    guard let password = passwordTextField.text else { return }

    guard let name = nameTextField.text else { return }

    Auth.auth().createUser(withEmail: email, password: password) { (data, error) in
        if error != nil{
            print(error.debugDescription)
            print("Error occurred")
        } else
        {
            print("Data -- >\(String(describing: data))")
            self.saveDataInFirebase(name: name, password: password, email: email)

//这里数据保存在firebase的身份验证表中,所以下一步//是将其详细信息保存在json中的db中

        }
    }
}
func saveDataInFirebase(name: String, password: String, email: String)
{

    let userData = ["name" : name, "email" : email]
    print("name \(name) --- Email \(email)")

//打印要保存在数据库中的详细信息

    let firebaseRef = Database.database().reference(fromURL: "https://chatdemo1-d3423.firebaseio.com/")
    firebaseRef.updateChildValues(userData) { (error, dbRef) in
        if error != nil{
            print("------------------")
            print(error.debugDescription)
            print("----------------------")
        }
        else
        {
            print("Data Saved Successfully")
        }
    }
}

【问题讨论】:

  • 请将您的代码添加为文本而不是图像。您还应该包括您的数据库结构和数据库安全规则(作为文本)
  • 我使用的signIn方法是正常的登录方式因为当我查找auth用户时,经过身份验证的用户条目存储在db中,但该条目没有保存在我们以son格式查看用户的数据库中

标签: ios firebase firebase-realtime-database


【解决方案1】:

问题中的代码可能不是您想要使用的,因为它每次运行时都会覆盖您的整个 Firebase。

原因是您没有将数据写入 Firbase 的子节点,而是将其写入主节点。这是正在写的内容:

your_firebase //<- this is where you're writing too each time
   email: "some email"
   name:  "some name"

我猜你想像这样构造它

your_firebase
    user_id
      email: "some email"
      name:  "some name"

执行此操作的代码是

var ref: DatabaseReference!

func viewDidLoad() {
    self.ref = Database.database().reference()
    .
    .
    .     
}

func createUser() {
    let email = "some email"
    let password = "some password"
    let name = "some name"
    Auth.auth().createUser(withEmail: email, password: password) { (authResult, error) in
        if let x = error { //some fancy error checking
            let err = x as NSError
            switch err.code {
            case AuthErrorCode.emailAlreadyInUse.rawValue:
                print("email in use!")
            default:
                print("unknown error")
            }
        } else {
            guard let user = authResult?.user else { return }
            let uid = user.uid
            let usersRef = self.ref.child("users")
            let thisUserRef = usersRef.child(uid)
            thisUserRef.child("email").setValue(email)
            thisUserRef.child("name").setValue(name)
        }
    }
}

此代码假定 Firebase 规则允许用户写入 users 节点

【讨论】:

  • 我需要从身份验证结果中提取结果,当用户在 createUser 方法中注册时我会得到你想要告诉的结果?
  • textsaver.flap.tv/lists/2519 查看此链接以获取我的代码和控制台输出
  • @ShubhamTomar 这行 guard let user = authResult?.user else { return } 提取 authResult,它是一个 Firebase 用户对象。从那里您可以获取用户 uid。一旦你有了它,你就可以在 /users/uid 节点中存储有关用户的其他信息,例如他们的姓名、最喜欢的食物以及他们关注的帖子。尝试我的问题中的代码,因为它已经过测试并且可以执行您想要的操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-15
  • 2016-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多