尝试在Swift中使用Json令牌从服务器获取身份验证

时间:2015-06-05 10:51:08

标签: json swift token nsurlsession

我在Swift应用程序中添加了一个Login进程,并添加了以下代码来处理Json令牌身份验证

 class func getValidationFromServer(success: ((svrData: NSData!) -> Void)) {
    var usrName = ViewController.gVariables.gUser
    var pwd = ViewController.gVariables.gPwd
    var postData = NSMutableData(data: "username=\(usrName)".dataUsingEncoding(NSUTF8StringEncoding)!)
    postData.appendData("&password=\(pwd)".dataUsingEncoding(NSUTF8StringEncoding)!)
    postData.appendData("&grant_type=password".dataUsingEncoding(NSUTF8StringEncoding)!)

    var request = NSMutableURLRequest(URL: NSURL(string: "http://api.mip.local/oauth/token")!,
        cachePolicy: .UseProtocolCachePolicy,
        timeoutInterval: 10.0)
    request.HTTPMethod = "POST"
    request.HTTPBody = postData

    let session = NSURLSession.sharedSession()
    let dataTask = session.dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in
        if (error != nil) {
            ViewController.gVariables.gUser = "Error - \(error) "
        } else {
            let httpResponse = response as? NSHTTPURLResponse
            ViewController.gVariables.gUser = response.description
        }
    })
}

当应用程序运行时,它到达let dataTask ..行并直接通过它,因此没有响应。我告诉我有正确的网址,我在登录时通过模拟器运行应用程序,所以必须有其他我做错的事情。

1 个答案:

答案 0 :(得分:0)

我想在这里你需要一个 Asynchonous POST 请求代码

    let urlPath: String = "http://api.mip.local/oauth/token"
    var url: NSURL = NSURL(string: urlPath)!
    var postData = NSMutableData(data: "username=\(usrName)".dataUsingEncoding(NSUTF8StringEncoding)!)
    postData.appendData("&password=\(pwd)".dataUsingEncoding(NSUTF8StringEncoding)!)
    postData.appendData("&grant_type=password".dataUsingEncoding(NSUTF8StringEncoding)!)
    var request1: NSMutableURLRequest = NSMutableURLRequest(URL: url)
    request1.HTTPMethod = "POST"
    request1.timeoutInterval = 60
    request1.HTTPBody=postData
    request1.HTTPShouldHandleCookies=false

    let queue:NSOperationQueue = NSOperationQueue()

    NSURLConnection.sendAsynchronousRequest(request1, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
        var err: NSError
        var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
        println("AsSynchronous\(jsonResult)")
    })