Search code examples
iosswiftapialamofire

Not working - Registering User in Api Programatically in Swift 3/4


I'm trying to register a user in my API. When I do it in Postman, it registers the user and returns the status as true and message as User Created, but when I try to create a new user from swift programatically it always shows User already exists (giving false response), even though it is not registered. I'm Using Swift 4 Xcode 9.

The almost same code work works for Sign In Api, but not working for User Registration. Also, after I register that user through postman in Api, it works perfectly fine for Login. So I'm not getting what the problem is with RegisterUser. Code shows no error.

Here is my code for registeringUser:

import UIKit
import SwiftyJSON
import Alamofire
import SwiftKeychainWrapper

class RegisterUserViewController: UIViewController {
    @IBOutlet weak var firstNameTextField: UITextField!
    @IBOutlet weak var lastNameTextField: UITextField!
    @IBOutlet weak var emailAddressTextField: UITextField!
    @IBOutlet weak var passwordTextField: UITextField!
    @IBOutlet weak var repeatPasswordTextField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

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

    @IBAction func cancelButtonTapped(_ sender: Any) {
        print("Cancel button tapped")

        self.dismiss(animated: true, completion: nil)
    }


    @IBAction func signupButtonTapped(_ sender: Any) {
       print("Sign up button tapped")


        // Validate required fields are not empty
        if (firstNameTextField.text?.isEmpty)! ||
            (lastNameTextField.text?.isEmpty)! ||
            (emailAddressTextField.text?.isEmpty)! ||
            (passwordTextField.text?.isEmpty)!
        {
            // Display Alert message and return
            displayMessage(userMessage: "All fields are quired to fill in")
            return
        }

        // Validate password
        if ((passwordTextField.text?.elementsEqual(repeatPasswordTextField.text!))! != true)
        {
            // Display alert message and return
            displayMessage(userMessage: "Please make sure that passwords match")
            return
        }



        let userdefault = UserDefaults.standard
        userdefault.set(emailAddressTextField.text, forKey: "email_id")
        //userdefault.set(emailAddressTextField, forKey: "email_id")
         print("email_id",emailAddressTextField.text)

        //print("email_address",userdefault.string(forKey: "email_id"))


        var request = URLRequest(url: URL(string: "http://horn.hostingduty.com/api/v1/app_adduser")!)
        request.httpMethod = "POST"
        print("its working")
        let postString =    "first_name=\(firstNameTextField.text)";
        "last_name=\(lastNameTextField.text)";
        "email_id=\(emailAddressTextField.text)";
        "password=\(passwordTextField.text)"

        request.httpBody = postString.data(using: .utf8)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            guard let data = data, error == nil else {                                                 // check for fundamental networking error
                print("error=\(error)")
                return
            }

            if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {           // check for http errors
                print("statusCode should be 200, but is \(httpStatus.statusCode)")
                print("response = \(response)")
            }



            var responseString = String(data: data, encoding: .utf8)
            print("responseString = \(responseString)")

            if(responseString?.contains("true"))!{

                DispatchQueue.main.async
                    {

                        let homePage = self.storyboard?.instantiateViewController(withIdentifier: "HomePageViewController") as! SWRevealViewController
                        let appDelegate = UIApplication.shared.delegate
                        appDelegate?.window??.rootViewController = homePage

                }

          print("status = true")

            }
            else{

                                DispatchQueue.main.async
                                    {

                                        self.showToast(message: "Already exists !! ")
                                    }
                print("Status = false")

            }
        }

         task.resume()


    }
    func displayMessage(userMessage:String) -> Void {
        DispatchQueue.main.async
            {}
                let alertController = UIAlertController(title: "Alert", message: userMessage, preferredStyle: .alert)

                let OKAction = UIAlertAction(title: "OK", style: .default) { (action:UIAlertAction!) in
                    // Code in this block will trigger when OK button tapped.
                    print("Ok button tapped")
                    DispatchQueue.main.async
                        {
                            self.dismiss(animated: true, completion: nil)
                    }
                }
                alertController.addAction(OKAction)
                self.present(alertController, animated: true, completion:nil)
        }

}

Solution

  •  func loginApi() {
    
    
        let userName = userNameText?.text ?? ""
        print(userName)
        let password = passwordText?.text ?? ""
        print(password)
        let params = [
    
            "emailId"      :  userName as Any,
            "password"     :  password as Any,
    
            ] 
    
    
        Alamofire.SessionManager.default.request("your url", method: .post, parameters: params, encoding: URLEncoding(destination: .methodDependent))
            .validate(statusCode: [200, 201])
            .responseJSON {
                 [unowned self] (response) in
    
    
    
                    switch(response.result) {
                    case .success:
                        guard let json = response.result.value as! 
                   [String:Any]? else{ return}
                        print("Response \(json)")
                        if let data = json["data"] as! [String:Any]?{
                         let email_id : String = email_id
                                    userdefault.set(emailAddressTextField.text, forKey: "email_id")
                                    print(email_id)
                                    UserDefaults.standard.synchronize()
                              let homePage = self.storyboard?.instantiateViewController(withIdentifier: "HomePageViewController") as! SWRevealViewController
                        let appDelegate = UIApplication.shared.delegate
                        appDelegate?.window??.rootViewController = homePage
                                }
    
                            }
    
                        }
    
    
                    case .failure(let err):
                        self.showNormalAlertWithTitle(NSLocalizedString("Alert!", comment: ""), message:NSLocalizedString("Please enter valid username or password", comment: ""))
                        print("\(err.localizedDescription)")
                        break
    
                    }
    
                }
        }