ios - 使用 alamofire 的 token 请求

标签 ios swift web-services rest alamofire

我是 IOS 开发领域的新手,我正在使用 swift 和 Alamofire 开发应用程序。我需要调用返回 session token 的服务端点才能登录到我的应用程序:

Alamofire.request(.POST, url, parameters: ["grant_type": "password", "username": "myusername", "password": "mypassword"], encoding: .JSON).validate().responseString { response in
        switch response.result {
        case .Success:
            onSuccess()
        case .Failure(let error):
            onError(error)
        }
    }

这个Api调用的响应是成功的,但是我总是得到{"error":"unsupported_grant_type"}而不是得到token信息。

请指教。

最佳答案

使用 SwiftyJSONAlomofire,我使用了这个对我有用的函数:

let authTokenUrl = "http://0.0.0.0:8000/api/auth/token/"

func doAuth(username:String, password:AnyObject){
    let params = ["username": username, "password": password]
    let authToken = Alamofire.request(Method.POST, self.authTokenUrl, parameters: params)
    self.activityLoader.startAnimating()
    authToken.responseJSON{ response in
        //print(response.request)  // original URL request
        //print(response.response) // URL response
        //print(response.data)     // server data
        //print(response.result)   // result of response serialization

        switch response.result {
        case .Success:
            //print("Success!")
            let statusCode = response.response!.statusCode

            switch statusCode {
                case 200...299:
                    //self.messageText.text = "Auth success!"
                    let jsonData = JSON(response.result.value!)  //unwrap the data (because it was optional) & use SwiftyJSON
                    let token = jsonData["token"].string
                    let username = jsonData["user"].string!
                    let active = jsonData["active"].bool!

                    let userid = jsonData["userid"].int!
                    // si dessous c'est la correction
                    //let userid = jsonData["userid"].string!


                    if active {
                        self.keychain["token"] = token
                        self.keychain["username"] = username
                        self.keychain["userid"] = String(userid)


                    } else {
                        self.keychain["token"] = nil
                    }
                    self.getProjects()
                case 400...499:
                    let jsonData = JSON(response.result.value!)
                    let errorArray = jsonData["non_field_errors"].array
                    if errorArray != nil {
                        var currentString = ""
                        for err in errorArray! {
                            currentString += "\(err)"
                        }
                        //print("Server responded no. \(currentString)")
                        Notification().notify("\(currentString)", delaySec: 2.5, inspeed: 0.5, outspeed: 1.0)
                    }
                case 500...599:
                    //print("Server Error.")
                    Notification().notify("There was an error.", delaySec: 2.5, inspeed: 0.5, outspeed: 1.0)
                default:
                    // print("There was an error with your request.")
                    Notification().notify("There was an error with your request.", delaySec: 2.5, inspeed: 0.5, outspeed: 1.0)
                }
        case .Failure(let error):
            print("Request failed with error: \(error)")
        }
    }
    self.activityLoader.stopAnimating()
}

关于ios - 使用 alamofire 的 token 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35675165/

相关文章:

c# - Web 服务的空响应 (WSDL SOAP)

ios - 在 iOS 应用程序中使用 Google Maps Direction API

ios - executeFetchRequest 退出当前方法

iphone - 在 Objective-C 中,textfielddoneediting 最初声明在哪里?

ios - 在表格上显示排序结果 - Swift4

java - Axis2 客户端在 ServiceStub 类中获取 NullPointerException

ios - 防止 MKPolygon 打结

ios - 获取核心数据,显示数组中的项目数而不是字符串

ios - 从 Storyboard 中拖动 UI 元素时 Xcode 崩溃

iphone - 与 iPhone 和 Web 服务双向同步