01Riv
01Riv

Reputation: 1454

Data not updating to current user when new user logs in using Swift and Parse

Im working on an app that uses phone number and SMS verification to login. It all works well except for one small issue. If I logout of one user, then login with another, the previous users data is loaded, however a new user is created but the previous users data is displayed. I have to logout and login the new user again to load their data. Anybody see whats going on?

Login code:

class LoginViewController: UIViewController {

func displayAlert(title: String, message: String) {
    var alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)
    alert.addAction(UIAlertAction(title: "Ok", style: .Default, handler: { (action) -> Void in
    }))
    self.presentViewController(alert, animated: true, completion: nil)
}


@IBOutlet weak var instructionLabel: UILabel!
@IBOutlet weak var phoneNumberTextField: UITextField!
@IBOutlet weak var sendCodeButton: UIButton!

var phoneNumber: String = ""



override func viewDidLoad() {
    super.viewDidLoad()

    first()
    self.editing = true
}

func first() {
    phoneNumber = ""
    phoneNumberTextField.placeholder = "555-555-5555"
    instructionLabel.text = "Enter your phone number to login or sign up"
    sendCodeButton.enabled = true
}

func second() {

    phoneNumber = phoneNumberTextField.text!
    phoneNumberTextField.text = ""
    phoneNumberTextField.placeholder = "1234"
    instructionLabel.text = "Enter your 4 digit security code"
    sendCodeButton.enabled = true
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

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

    phoneNumberTextField.becomeFirstResponder()
}

@IBAction func didTapSendCodeButton() {

    let preferredLanguage = NSBundle.mainBundle().preferredLocalizations[0]

    let textFieldText = phoneNumberTextField.text ?? ""

    if phoneNumber == "" {
        if (preferredLanguage == "en" && textFieldText.characters.count != 10) {
            displayAlert("Phone Login", message: NSLocalizedString("warningphone", comment: "You must enter a 10 digit US phone number including area code"))
            return first()
        }

        self.editing = false
        let params = ["phoneNumber" : textFieldText, "language" : preferredLanguage]
        PFCloud.callFunctionInBackground("sendCode", withParameters: params) { response, error in
            self.editing = true
            if let error = error {
                var description = error.description
                if description.characters.count == 0 {
                    description = NSLocalizedString("warningGeneral", comment: "Something went Wrong. Please try again")
                } else if let message = error.userInfo["error"] as? String {
                    description = message
                }
                self.displayAlert("Login Error", message: description)
                return self.first()
            }
            return self.second()
        }
    } else {
        if textFieldText.characters.count == 4, let code = Int(textFieldText) {
            return doLogin(phoneNumber, code: code)
        }

        displayAlert("Code Entry", message: NSLocalizedString("warningCodeLength", comment: "You must enter the 4 digit code texted to your number"))
    }
}

func doLogin(phoneNumber: String, code: Int) {

    self.editing = false
    let params = ["phoneNumber": phoneNumber, "codeEntry": code] as [NSObject:AnyObject]
    PFCloud.callFunctionInBackground("logIn", withParameters: params) { response, error in
        if let description = error?.description {
            self.editing = true
            return self.displayAlert("Login Error", message: description)
        }
        if let token = response as? String {
            PFUser.becomeInBackground(token) { user, error in
                if let _ = error{
                    self.displayAlert("Login Error", message: NSLocalizedString("warningGeneral", comment: "Something happened while logging in. Please try again"))
                    self.editing = true
                    return self.first()
                }

                return self.dismissViewControllerAnimated(true, completion: nil)
            }
        } else {
            self.editing = true
            self.displayAlert("Login Error", message: NSLocalizedString("warningGeneral", comment: "Something went wrong. Please try again"))
            return self.first()
        }
    }
}

override func setEditing(editing: Bool, animated: Bool) {
    sendCodeButton.enabled = editing
    phoneNumberTextField.enabled = editing
    if editing {
        phoneNumberTextField.becomeFirstResponder()
    }
}
}

extension LoginViewController : UITextFieldDelegate {
func textFieldShouldReturn(textField: UITextField) -> Bool {
    self.didTapSendCodeButton()

    return true

}
}

Upvotes: 2

Views: 42

Answers (1)

01Riv
01Riv

Reputation: 1454

Found the problem I had to update the label in viewWillAppear

Upvotes: 0

Related Questions