2016-07-04 47 views
0

當參數(params)值不正確時,它仍然登錄到另一個視圖。在控制檯中,打印時,響應正文和響應標題都會返回值。我哪裏錯了?PerformSegueWithIdentifier如果參數值對於http POST請求是正確的

func login() { 
    let request = NSMutableURLRequest(URL: NSURL(string: "http://someurl/verify/")!) 
    let session = NSURLSession.sharedSession() 
    request.HTTPMethod = "POST" 

    let params = 
     [ 
      "username":username.text!, 
      "password":password.text!, 
      "deviceid":"r49rvnjff", 
      "method":"method", 
      "payload":"payload" 
     ] 
      as Dictionary<String,String> 

    print(params) 

    do { 
     request.HTTPBody = try NSJSONSerialization.dataWithJSONObject(params, options: .PrettyPrinted) 
    } 
    catch { 
     print(error) 
     return 
    } 

    request.addValue("application/json", forHTTPHeaderField: "Content-Type") 
    request.addValue("application/json", forHTTPHeaderField: "Accept") 

    let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in 

     if error == nil {} 

     let json: NSDictionary? 
     do { 
      json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableLeaves) as? NSDictionary 
     } 
     catch let dataError { 
      print(dataError) 
      let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding) 
      print("Error could not parse JSON: '\(jsonStr)'") 
      return 
     } 

     if let parseJSON = json { 

      let authenticated = parseJSON["authenticated"] as? String 
      print("authenticated:\(authenticated)") 
      if authenticated != "False" { 
      dispatch_async(dispatch_get_main_queue()) { 
       self.performSegueWithIdentifier("segue", sender: self) 
       } 
      } 
     } 
     else { 
      let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding) 
      print("Error could not parse JSON: \(jsonStr)") 
     } 
    }) 
    task.resume() 
} 

在此先感謝!

回答

0

您的無效回覆是什麼樣的?可能是因爲它返回「false」而不是「False」(這是你正在檢查的內容),無論如何我建議你驗證你的服務器響應,以便你可以讓驗證的參數成爲布爾值,這樣你就可以解開你可選的,因爲這樣:

if let authenticated = json["authenticated"] as? Bool { 
    if (authenticated) 
    { 
     // ... 
    } 
} 

另外,我注意到,你的else塊將永遠不會被打,因爲你JSON財產被解開。你的序列化是成功的,所以json不是零,因此如果讓parseJSON = json將始終工作。

我建議以下方法:

if let authenticated = json["authenticated"] as? Bool 
{ 
    if (authenticated) 
    { 
     dispatch_async(dispatch_get_main_queue()) { 
      self.performSegueWithIdentifier("segue", sender: self) 
     } 
    } 
    else 
    { 
     let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding) 
     print("Error could not parse JSON: \(jsonStr)") 
    } 
} 

祝你好運!