不工作 - 在Swift 3/4中以编程方式在Api中注册用户

问题描述 投票:3回答:2

我正在尝试在我的API中注册用户。当我在Postman中执行此操作时,它会注册用户并将状态返回为true并将消息作为User Created返回,但是当我尝试以编程方式从swift创建新用户时,它始终显示User已存在(给出错误响应),即使它没有注册。我正在使用Swift 4 Xcode 9。

几乎相同的代码工作适用于登录Api,但不适用于用户注册。此外,在我通过Api中的邮递员注册该用户后,它对于Login非常适用。所以我没有得到RegisterUser的问题。代码显示没有错误。

这是我注册用户的代码:

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)
        }

}
ios swift api alamofire
2个回答
0
投票
 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

                }

            }
    }

0
投票

您应该在请求中添加标头并发送正确的url编码键/值

request.setValue("application/x-www-form-urlencoded; charset=utf-8", forHTTPHeaderField: "Content-Type");

并将您的帖子字符串更改为

let postString = "first_name=\(firstNameTextField.text)&" +
        "last_name=\(lastNameTextField.text)&" +
        "email_id=\(emailAddressTextField.text)&" +
        "password=\(passwordTextField.text)"

request.httpBody = postString.data(using: .utf8)

UPDATE

func callApi(){
        var request = URLRequest(url: URL(string: "http://horn.hostingduty.com/api/v1/app_adduser")!)
        request.httpMethod = "post"
        request.setValue("application/x-www-form-urlencoded; charset=utf-8", forHTTPHeaderField: "Content-Type")
        print("its working")
        let postString =    "first_name=test&" +
        "last_name=test&" +
        "[email protected]&" +
        "password=123&"

        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?.localizedDescription)")
                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"))!{
                print("status = true")
            }
            else{
                print("Status = false")
            }
        }

        task.resume()
    }            
© www.soinside.com 2019 - 2024. All rights reserved.