2017-08-18 6 views
1

Ich erstelle eine Login-Seite, wo, sobald der Benutzer Benutzername Passwort eingibt, dann werden die Daten an die API gesendet und wenn die eingegebenen Daten korrekt sind, dann gibt Erfolg zurück. Wenn das Ergebnis Erfolg ist, muss ich den Benutzerschlüssel des Benutzers erhalten, die durch die Serverin dieses Formular zurückgegeben wird:Wie bekomme ich Daten vom POST? Json

{ 
    "STATUS_DESC": "Success", 
    "STATUS_CODE": 1, 
    "email": "[email protected]", 
    "api_token": "Mqbraok1zsdasdasd4j3m" 
} 

Jetzt muss ich diese api Token speichern. Dafür ich diese Funktion versuche aber seine nicht funktioniert -

@IBAction func signInBtnPressed(_ sender: Any) { 

    let email : String! = self.usernameField.text 
    let password : String! = self.passwordField.text 

    var request = URLRequest(url: URL(string: "\(URL_BASE)\(AUTH)\(LOGIN)")!) 
    request.httpMethod = "POST" 
    let postString = "email=\(email!)&&password=\(password!)" 
    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=\(String(describing: error))") 
      print("cant run") 
      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 = \(String(describing: response))") 
      print("\(email)") 
      print("\(password)") 


     } 
     else { 
     let responseString = String(data: data, encoding: .utf8) 
     print("responseString = \(String(describing: responseString))") 
      print("\(URL_BASE)\(AUTH)\(LOGIN)/?\(postString)") 
      Alamofire.request("\(URL_BASE)\(AUTH)\(LOGIN)/?\(postString)" , method : .post).responseJSON { response in 
     let result = response.result 
     if let dict = result.value as? Dictionary<String,AnyObject> 
     { 
      print(dict) 
     let userTOKEN = dict["api_token"] as! String 
      print(userTOKEN) 
      } 

      } 
     } 
    } 
    task.resume() 
} 

Sie mir bitte sagen, welche Fehler m tun und wie kann ich es beheben ..

Antwort

1

dies testen Daten zu json Parsen:

if let jsonData = data { 
     do { 
      let jsonResult = try JSONSerialization.jsonObject(with: jsonData, options: .allowFragments) as? [String : Any] 
      print(jsonResult) 
      print(jsonResult?["api_token"]) 

      //Here we saving aoi_token to UserDefaults: 
      UserDefaults.standard.setValue(token, forKey: "api_token") 
      print("\(UserDefaults.standard.value(forKey: "api_token")!)") 
    } catch { 
      print("JSON Processing Failed") 
    } 
} 

Und Ihre api_token speichern Sie UserDefaults verwenden müssen:

UserDefaults.standard.setValue(token, forKey: "api_token") 
print("\(UserDefaults.standard.value(forKey: "api_token")!)") 
+0

können Sie sagen, wohin in Code –

+0

ich die Antwort bearbeitet habe. Ich habe Code hinzugefügt, um api_token zu UserDefaults zu speichern. Fügen Sie diesen Code in den Antwortabschluss Ihrer Datenaufgabe ein. –

+0

Lassen Sie Aufgabe = URLSession.shared.dataTask (mit: Anfrage) {Daten, Antwort, Fehler in {// Code hier eingeben} –

-2

Ich verstehe nicht, warum Sie URLSession verwenden. Sie können einfach Alamofire verwenden, was ein Wrapper um URLSession ist.

@IBAction func signInBtnPressed(_ sender: Any) { 
    let email : String = self.usernameField.text ?? "" 
    let password : String = self.passwordField.text ?? "" 

    Alamofire.request("\(URL_BASE)\(AUTH)\(LOGIN)/", 
         method: .post, 
         parameters: ["email": email, 
            "password", password], 
         encoding: URLEncoding.httpBody).responseJSON { response in 

         if let dict = response.value as? [String: Any] { 
          let token = dict["api_token"] as! String 

          //store token 
          UserDefaults.standard.set(token, forKey: "token") 
          UserDefaults.standard.synchronize() 
         } 


         let savedToken = UserDefaults.standard.string(forKey: "token")  
         print(savedToken) 

     } 

} 
+0

Dank aber wie kann ich mein Problem lösen, indem das zu tun selbe wa –

+0

@KeshuRai Welcher Weg? nur URLSession verwenden? –

+0

Mein Problem ist: Wie kann ich das api_token bekommen, das nach dem Einloggen zurückkommt. –