使用AlmamoFire(Swift)使用WhenIWork API进行身份验证

时间:2017-08-17 17:26:42

标签: swift alamofire

更新问题:

我与WhenIWork团队取得了联系并发现他们需要在身体中传递用户名和密码,但需要使用我们的表格。所以我已经解决了。如果你看下面的答案,它的确有效。

谢谢大家!

我正试图在Xcode上使用Swift和Alamofire从WhenIWork获取访问令牌,json返回Success但是说#34; Application Not Found Error"

我一直在寻找来自WhenIWork Doc的文档但错误代码没有成功。 (他们在1xxx范围内没有任何错误)

想法?我是Swift的新手(以及一般的编码),所以任何帮助都会受到赞赏。

谢谢!

以下是终端答案:

SUCCESS: {
    code = 1110;
    error = "Application not found";
}
[Request]: POST https://api.wheniwork.com/2/login/
[Response]: <NSHTTPURLResponse: 0x6080000325e0> { URL: https://api.wheniwork.com/2/login/ } { status code: 401, headers {
    "Access-Control-Allow-Headers" = "Authorization, Origin, X-Requested-With, W-Date-Format, Content-Type, Accept, W-Token, W-UserId, W-Key, branch";
    "Access-Control-Allow-Methods" = "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS";
    "Access-Control-Allow-Origin" = "*";
    "Cache-Control" = "no-cache";
    Connection = "keep-alive";
    "Content-Type" = "application/json";
    Date = "Thu, 17 Aug 2017 17:11:08 GMT";
    Server = nginx;
    "Transfer-Encoding" = Identity;
    "X-Database" = ro;
    "X-State" = "RequestId: 0f853dd4-836f-11e7-90f4-0242e14cb0c5, LoginId: 0, AccountId: 0";
    "X-Timer-Database" = "0.0052359104156494";
    "X-Timer-Total" = "0.012078046798706";
} }

代码:

func logInWhenIWork() {
    let parameters: Parameters = [
        "username": "cxxxx@xxxx.ca",
         "password": "xxxxxxx",
          "W-Key": "xxxxxxxxxxxxxsxx"
    ]

Alamofire.request("https://api.wheniwork.com/2/login", method: .post, parameters: parameters, encoding: JSONEncoding.default).responseJSON { response in
    print(response)
    debugPrint(response)

    if let json = response.result.value { 
        print("JSON: \(json)")
    }  else {
        print(response)
    }
}

2 个答案:

答案 0 :(得分:0)

我没有多少使用Alamofire,但我尝试了以下内容:

let parameters = ["username":"user@example.com",
                  "password": "*******"]
let headers = ["W-Key": "iworksoharditsnotfunny"]
var req = Alamofire.request("https://api.wheniwork.com/2/login",
                            parameters: parameters,
                            encoding: JSONEncoding.default,
                            headers: headers)

请求最终看起来像这样:

curl -v \
    -H "Content-Type: application/json" \
    -H "Accept-Language: en-US;q=1.0" \
    -H "User-Agent: Unknown/Unknown (Unknown; build:Unknown; OS X 10.12.6) Alamofire/1.0" \
    -H "W-Key: iworksoharditsnotfunny" \
    -H "Accept-Encoding: gzip;q=1.0, compress;q=0.5" \
    -d "{\"username\":\"user@example.com\",\"password\":\"*******\"}" \
    "https://api.wheniwork.com/2/login"

这似乎与WhenIWork API文档中的example given非常匹配。我没有帐户,所以我无法直接测试。

答案 1 :(得分:0)

对于那些想要答案的人。我终于弄明白了。这是

func logInWhenIWork(){

    let url = URL(string: "https://api.wheniwork.com/2/login")!
    var urlRequest = URLRequest(url: url)
    urlRequest.httpMethod = "POST"
    urlRequest.allHTTPHeaderFields = ["W-Key": "xxxxxxxxxxx","Content-Type":"application/json"]


    let parameters = ["username": "ss@xxx.ca", "password": "sssdsds"]

    do {
        urlRequest.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: [])
    } catch {
        // No-op
    }

    urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")


    Alamofire.request(urlRequest).responseJSON { response in

        switch response.result {
        case .success(let value):
            let json = JSON(value)

// print(“JSON:(json)”)

            let token = json["token"].stringValue

           let newUserID = json["users"][0]["id"].int
            print(newUserID)

            self.wUserID = String(describing: newUserID)

// print(token)

            self.wToken = token

            if self.wToken != "" {

                print("Successfully logged in")

            } else {
                print("Log In Failed")
            }





        case .failure(let error):
            print(error)
        }



    }




}