2017-08-18 1 views
1

Je crée une page de connexion où une fois que l'utilisateur entre le nom d'utilisateur mot de passe puis les données sont envoyées à l'API et si les données saisies sont correctes puis renvoie le succès. Si le résultat est le succès, je dois obtenir la clé de l'utilisateur de l'utilisateur qui est renvoyé par la Serverin ce formulaire:Comment obtenir des données du POST json

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

Maintenant je dois stocker ce jeton api. Pour cela, je suis en train cette fonction, mais sa ne fonctionne pas -

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

S'il vous plaît me dire quelle erreur fais et comment puis-je corriger ..

Répondre

1

Essayez ceci pour l'analyse des données JSON:

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

Et pour stocker votre api_token vous devez utiliser UserDefaults:

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

pouvez-vous dire où passer dans le code –

+0

J'ai édité la réponse. J'ai ajouté du code pour stocker api_token à UserDefaults. Mettez ce code dans la fermeture de réponse de votre tâche de données. –

+0

let task = URLSession.shared.dataTask (avec: request) {données, réponse, erreur dans {// Mettre le code ici} –

-2

Je ne comprenais pas pourquoi vous utilisez URLSession. Vous pouvez simplement utiliser Alamofire qui est une enveloppe autour de URLSession.

@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

merci, mais comment puis-je résoudre mon problème en procédant même wa –

+0

@KeshuRai De quelle façon? en utilisant seulement 'URLSession'? –

+0

mon problème est: Comment puis-je obtenir l'api_token qui revient après la connexion .. –