2017-11-20 31 views
0

登録やSignUpをアプリに登録した後にユーザー情報を保存する方法についてのチュートリアルを見たことがありますが、ユーザーがuidですべてのユーザーを保存し、あなたがプロまたはそれを行うには良い方法であるかyesとユーザー名でごユーザを保存したい場合、アプリユーザー名と電子メールをファイアベースに保存する方法

@IBAction func SignUp(_ sender: Any) { 
     if username.text != nil, email.text != nil, password.text != nil, fullname.text != nil { 

      activityIndicator.startAnimating() 

      Auth.auth().createUser(withEmail: email.text!, password: password.text!, completion: { (user, error) in 
       if error != nil { 
        AlertController.showAlert(self, titel: "Error", message:".Fill all fields\n .User do exists\n .Network error ") 
        self.activityIndicator.stopAnimating() 
        return 
       } 
       let uid = user?.uid 
       let storageRef = Storage.storage().reference(forURL: "gs://,,,,,,,,,.com").child("profile_image").child(uid!) 
       if let profileImg = self.selectedImage, let imageData = UIImageJPEGRepresentation(profileImg, 0.1){ 
        storageRef.putData(imageData, metadata: nil, completion: { (metadata, error) in 
         if error != nil{ 
          return 
         } 
         let profileImageUrl = metadata?.downloadURL()?.absoluteString 
         let ref = Database.database().reference() 
         let usersReferance = ref.child("users") 
         let newUserReferance = usersReferance.child(uid!) 
         newUserReferance.setValue(["fullname": self.fullname.text, "username": self.username.text, "email": self.email.text, "password": self.password.text, "profileImageUrl": profileImageUrl]) 
        }) 
       } 
       self.dismiss(animated: true, completion: nil) 
       self.activityIndicator.stopAnimating() 
      }) 
} 
} 
} 

this is how it shows in firebase

答えて

1

チャットする問題ではありません。どう思いますかは、そこにユーザー名のことで次のようにすることができます

@IBAction func SignUp(_ sender: Any) { 
     if username.text != "", email.text != "", password.text != "", fullname.text != "" { 

      activityIndicator.startAnimating() 

      Auth.auth().createUser(withEmail: email.text!, password: password.text!, completion: { (user, error) in 
       if error != nil { 
        AlertController.showAlert(self, titel: "Error", message:".Fill all fields\n .User do exists\n .Network error ") 
        self.activityIndicator.stopAnimating() 
        return 
       } 
       let uid = user?.uid // here you are providing userID 
       let storageRef = Storage.storage().reference(forURL: "gs://.........com").child("profile_image").child(uid!) 
       if let profileImg = self.selectedImage, let imageData = UIImageJPEGRepresentation(profileImg, 0.1){ 
        storageRef.putData(imageData, metadata: nil, completion: { (metadata, error) in 
         if error != nil{ 
          return 
         } 
         let profileImageUrl = metadata?.downloadURL()?.absoluteString 
         let ref = Database.database().reference() 
         let usersReferance = ref.child("users") 
//      let newUserReferance = usersReferance.child(uid!) //here in ref you are creating a node with UID 

         //use your username 
         let newUserReferance = usersReferance.child(username.text!) 

         //set child values here as you doing 
         newUserReferance.setValue(["fullname": self.fullname.text, "username": self.username.text, "email": self.email.text, "password": self.password.text, "profileImageUrl": profileImageUrl]) 
        }) 
       } 
       self.dismiss(animated: true, completion: nil) 
       self.activityIndicator.stopAnimating() 
      }) 
     } 
    } 

2。 1)サインアップ中にユーザ名でノードを設定した場合のようなベットアプローチではないと思う他のユーザが同じユーザ名データを入力した場合新しいデータで置き換えられる

2)それは動作しますが、ただの懸念のために、それがユーザー名を確認するためのデータベースに追加の参照が必要になります利用できないか

- または作る - ユーザ名が取られたりしませ

されていることを、データベース全体にチェックとして実行しますユーザ名のリストを持つノードと配列内のすべてのノードを取得し、オフラインでテキストフィールドの検証を行うかどうかをチェックするか、イベントを監視することもできます

+0

usernameのテキストプロパティは決して 'nil'にはなりません。デフォルト値は空の文字列です。空の 'username.text?.isEmpty == false'でないか、それとも二重引用符と等しくないのかをテストするべきです!'!= "" ' –

+0

ああ、感謝しなかったので、 –

+0

あなたの答えに個人情報が含まれています – mazenqp

関連する問題