2016-12-03 7 views
1

私はユーザーの詳細ページ(ユーザー名、phno、電子メールとパスワード)を更新しようとしています。電子メールフィールドを更新することができますが、更新された場合は両方のユーザーと認証になりません。ここswift2.2firebaseの現在のユーザの電子メールとパスワード(ユーザノードと認証の両方)を更新する方法は?

でplzはコードの私userDeatilsViewController

class UserDetailsViewController: UIViewController { 

var user:UserDetails? 
let userRegister = UserInfo() 
var user_name:String? 
var first_name:String? 
var last_name:String? 
var ph_no:String? 
var e_mail:String? 
var pass_word:String? 
var activeField: UITextField? 

@IBOutlet var Username: UITextField! 
@IBOutlet var Firstname: UITextField! 
@IBOutlet var Lastname: UITextField! 
@IBOutlet var email: UITextField! 
@IBOutlet var phNo: UITextField! 
@IBOutlet var password: UITextField! 

var rootRef: FIRDatabaseReference! { 
    return FIRDatabase.database().reference() 
} 

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

    let userRef = FIRDatabase.database().reference().child("users") 
    userRef.observeEventType(.Value, withBlock: { (snapshot) in 

     for userInfo in snapshot.children { 
      self.user = UserDetails(snapshot: userInfo as! FIRDataSnapshot) 
      print(self.user) 
     } 
     if let user = self.user{ 
      self.Username.text = user.username 
      self.Firstname.text = user.firstname 
      self.Lastname.text = user.lastname 
      self.email.text = user.email 
      self.phNo.text = user.phno 
     } 
    }) 

    self.navigationController?.popViewControllerAnimated(true) 

} 
@IBAction func reset(sender: AnyObject) { 

    let userRef = FIRDatabase.database().reference().child("users") 

    if Username.text == "" { 
     Username.text = "enter title" 
    } else { 
     user_name = Username.text 
    } 

    if Firstname.text == ""{ 
     Firstname.text = "Firstname Missing" 
    } else { 
     first_name = Firstname.text 
    } 

    if Lastname.text == "" { 
     Lastname.text = "Lastname Missing" 
    } else { 
     last_name = Lastname.text 
    } 

    if phNo.text == "" { 
     phNo.text = "Phno Missing" 
    } else { 
     ph_no = phNo.text 
    } 

    if email.text == "" { 
     email.text = "email Missing" 
    } else { 
     if let user = FIRAuth.auth()?.currentUser { 
      user.updateEmail(email.text!, completion: { (error) in 

      if let error = error{ 
       print(error.localizedDescription) 
      } else { 
       let alertView = UIAlertView(title: "Update Email", message: "email Updated", delegate: self, cancelButtonTitle: "Ok") 
       alertView.show() 
      } 
     }) 
     self.e_mail = self.email.text 
     print(self.e_mail) 
     } 
    } 

    let updatenote = UserDetails(username: user_name!, firstname: first_name!, lastname: last_name!, email: e_mail!, phno: ph_no!) 

    print(updatenote) 

    let key = user!.ref!.key 
    print(key) 

    let updateRef = rootRef.child("https://stackoverflow.com/users/\(key)") 

    updateRef.updateChildValues(updatenote.toAnyObject()) 
    navigationController?.popViewControllerAnimated(true) 
} 
+0

は、私は、パスワード以外のページ内のすべてのユーザの詳細を取得しonly..Firstメールを更新する必要がありますテキストフィールド..パスワードを変更する必要がある場合(別のボタンアクション)、そうでない場合は他のフィールドを更新するだけです。 – tecE

+0

上記のサンプルを使用する場合は...パスワード文字列が無限になりますか? – tecE

答えて

0

私は問題はこれらの行であると信じて:

if let user = FIRAuth.auth()?.currentUser { 
    user.updateEmail(email.text!, completion: { (error) in 

'ユーザーが' 現在のユーザーのコピーです、現在のユーザーへの参照ではないため、ユーザーを更新すると、実際の現在のユーザーは更新されません。

このコードを試してユーザーのメールアドレスを更新してください。メールを更新するには、最近ログインしている必要があります。つまり、電子メールを変更するにはユーザーとしてログインする必要があります。すべてのbefore..first helps..triedそれはdidntの私は完全に間違っている可能性

FIRAuth.auth()?.currentUser?.updateEmail(email.text!) { (error) in 
    // ... 
} 

注...

+0

ya..it getting ..しかし、あなたが言ったように..最近のログインが必要なのですか?だから毎回私は更新しようとします...何度も何度もログインする必要がありますか?次の質問はユーザーを再認証することです。 – tecE

+0

@tecE Firebaseのガイド[ユーザーの管理](https://firebase.google.com/docs/auth/ios/)に記載されています。管理ユーザ) – Jay

関連する問題