1

IvはFirebase 2のコードベースをFirebase 3に変換していて、いくつかの問題を抱えていました。特定のデータベース参照でFIRApp.createUserWithEmailを使用するには?

基本的に私はFirebase DBの特定の場所に新しいユーザを作成する方法を見つけようとしています。

ゴール - 私はここでvar _USER_REF = FIRDatabaseReference().child("\(BASE_URL)/users")

@すべての新規ユーザーを保存するには、これまでのコードです。すでにユーザログの内またはレジスタ私はNSDefaultsへの「UID」を保存することを計画した場合NSDefaults

に保存されたUIDを持つユーザーで

class DataService { 

    static let dataService = DataService() 

    let BASE_URL = "https://project-1321.firebaseio.com" 
    var _BASE_REF = FIRDatabaseReference().child(BASE_URL) 
    var _USER_REF = FIRDatabaseReference().child("\(BASE_URL)/users") 
    var _NEWS_REF = FIRDatabaseReference().child("\(BASE_URL)/news") 
    var _MARKET_STATS = FIRDatabaseReference().child("\(BASE_URL)/market") 

    var CURRENT_USER_REF: FIRDatabaseReference { 

     let userID = NSUserDefaults.standardUserDefaults().valueForKey("uid") as! String 
     let currentUser = FIRDatabaseReference().child("\(_BASE_REF)").child("users").child(userID) 
     //let currentUser = Firebase(url: "\(BASE_REF)").childByAppendingPath("users").childByAppendingPath(userID) 
     return currentUser 

    } 



    func createNewAccount(uid: String, user: Dictionary<String, String>) { 
     _USER_REF.child(uid).setValue(user) 
    } 



} 

View Controller 

@IBAction func registerAccount(sender: AnyObject) { 

     guard let email = self.emailRegField.text where !self.emailRegField.text!.isEmpty else { 
      return 
     } 

     guard let username = self.usernameRegField.text where !self.usernameRegField.text!.isEmpty else { 
      return 
     } 

     guard let password = self.passwordRegField.text where !self.passwordRegField.text!.isEmpty else { 
      return 
     } 

     FIRAuth.auth()?.createUserWithEmail(email, password: password) { 
     (user, error) in 

      if error != nil { 
       print(error) 
       self.signUpErrorAlert("Alert", message: "There was a problem signing up!") 
      } else { 

       let user = ["provider": user?.providerID, "email": email, "username": username] 

       DataService.createNewAccount(user) // Doesnt Work 

       } 



       //Store UID in NSDefaults so if user reopen app they automatically log in if UID exsisits. 
       NSUserDefaults.standardUserDefaults().setValue(result ["uid"], forKey: "uid") 

       // Segue New User 

       self.performSegueWithIdentifier("newUserSegue", sender: nil) 

     } 

// Loggin。

そして、そのように確認してください。

override func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(animated) 

     if NSUserDefaults.standardUserDefaults().valueForKey("uid") != nil { 
      self.performSegueWithIdentifier("newUserSegue", sender: nil) 
     } else { 
      print("User is not registered or has their UID saved to NSDefaults") 
     } 

    } 

これは安全な方法ですか?

答えて

1

@brkrを見つけることができます

let BASE_URL = "https://project-1321.firebaseio.com" //remove this line 

この

let firebaseRef = FIRDatabase.database().reference() 
let newsRef = firebaseRef.child("news") 

のようなものを使用するには、あなたはまだ順番にUIDを使用することができますFirebaseデータベースに一意のユーザを追加することができます。例えば

は、ここにあなた(のDataServiceクラスで)refのユーザーである:

FIRAuth.auth()!.createUserWithEmail(email, password: pwd, completion: { authData, error in 
      if error == nil {  
       // Log user in 
       FIRAuth.auth()?.signInWithEmail(email, password: pwd) { authData, error in 
        // Save user information to Firebase data 
        let user = // your user Dictionary 
        DataService.createNewAccount(authData!.uid, user: user) 
       } 
      } else { 
       // Handle login error here 
      } 
     }) 

アカウントを作成するメソッドのコード:

let REF_USERS = FIRDatabase.database().referenceFromURL("\(URL_BASE)/users")

、Firebase 3.0でユーザーを作成します

func createNewAccount(uid: String, user: Dictionary<String, String>) { 
    REF_USERS.child(uid).setValue(user) 
} 
+0

すごい男。ありがとうございました!!私はあなたが言ったようにすべてをやったが、何らかの理由で私のView Controllerで 'createNewAccount'メソッドを使うことができない。画像を見る - http://imgur.com/a/obfR1 – brkr

+0

Nvm 'DataService.dataService.createNewAccount'を追加しなければならなかった – brkr

+0

実際には、UIDをNSUserDefaultsに保存して、後で自動ログインするようにしましたが、理由。何か考えますか?画像を参照してください - http://imgur.com/K8wlylO – brkr

1

私はそれが新しいFirebaseに必要であると考え、ダッシュボードに見てはいけない、すべてのユーザーが「認証」タブの下にある必要があり、

また、この行は新しいFirebase、あなたが照会されているURLに任意の意味をなさないdoesntのあなたがダウンロードした.plistにあります。あなたは上記のあなたのコメントに応えて、ここで多くの有用な情報https://firebase.google.com/docs/auth/ios/password-auth#sign_in_a_user_with_an_email_address_and_password

+0

私はもはや各ユーザーにUIDを追加する必要はないと言っていますか? 「認証」タブに「電子メール」と「パスワード」を保存すると、どのように追加情報を保存できますか?たとえば、ユーザーのサインアップフォームに5つのフィールドがあるとします。 "ユーザー名" "メール" "パスワード" "エイリアス" "場所"。私は 'createUserEmail'メソッドで" Email "と" Password "を使いますが、5つのフィールドすべてを" Users "ディレクトリに保存するには' setValue'を使う必要がありますか? – brkr

関連する問題