2016-08-26 15 views
0

firebaseに新しいユーザーを作成するには、以下のコードを使用してください。しかし、一番下にユーザ名の重複チェックを導入したら、私は問題に取り組んでいます。Swift - エラー処理後にFirebaseでユーザーを作成できません

シナリオ: 一意のアドレスで新しいユーザーを作成しますが、既に存在するユーザー名を選択してください。

フロー:

  • 挿入一意の電子メールアドレス、すでに以下のコードを実行しFirebase
  • に存在する
  • 挿入のユーザー名(を経由してユーザーの作成]ボタンをクリックします)を知らせる
  • 警告火災はすでにその名がありますその値が存在する
  • ユーザー名を修正してください。
  • コードを再実行します(ユーザー作成ボタンを使用)。
  • 今回は、Firebaseコンソールをプルアップしても情報がまだ書き込まれていないにもかかわらず、自分の電子メールアドレスがすでに存在することを示すエラーが表示されます。

FIRAuth.auth()をもう一度実行する前にリフレッシュする方法はありますか?これは、以前の「ユーザー作成」の試行がメモリ内に保持され、2回目の実行が引き継がれているかのようです。

FIRAuth.auth()?.createUserWithEmail(email!, password:pwd!, completion: { 
(user, error) in 
    if error != nil { 
     switch(error!.code) { 
     case FIRAuthErrorCode.ErrorCodeEmailAlreadyInUse.rawValue: 
      self.showErrorAlert("Email Already Exists", msg: "This email address is currently in use.") 
     default: 
      self.showErrorAlert("Other Error", msg: "Please contact us with the following error code \(error?.code)") 
     } 
    } else { 
     DataService.ds.REF_USERS.queryOrderedByChild("Username").queryEqualToValue(userName).observeSingleEventOfType(.Value, withBlock: { 
snapshot in 
     if (snapshot.value is NSNull) { 
      print("The SnapShot Value: \(snapshot.value)") 
      NSUserDefaults.standardUserDefaults().setValue(user!.uid, forKey: KEY_UID) 
      let userData=["First Name": firstName!, "Last Name": lastName!, "Email": email!, "Username": userName!, "Age": age!, "Skill": skill!] 
      DataService.ds.createFirebaseUser(user!.uid, user: userData) 
      self.performSegueWithIdentifier(NEW_USER_LOGGED_IN, sender: nil) 
     } else { 
      self.showErrorAlert("Username Already Exists", msg: "The username is currently in use. Please choose another.") 
     } 
}) 

答えて

0

これをフォローアップしてください。 "createUserWithEmail"コマンドを実行する前に、まずユーザー名の存在を確認する必要がありました。私が対応するコードの周りを一旦シフトすると、期待通りに機能しました。

関連する問題