【问题标题】:Token request using alamofire使用 alamofire 的令牌请求
【发布时间】:2016-06-11 01:15:49
【问题描述】:

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

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信息。

请指教。

【问题讨论】:

  • 如果您更改为编码:.URL(对于 application/x-www-form-urlencoded 标头)会发生什么?
  • 是的,可以,非常感谢。

标签: ios swift web-services rest alamofire


【解决方案1】:

使用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()
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-12
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 2018-08-13
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多