1

对 Swift 和 Siesta 来说都是新手...尝试提出“密码”授权类型请求。我使用了位于此处的代码(最底部的块)。我的代码是:

var authToken: String??
var tokenCreationResource: Resource { return resource("oauth/v2/token") }


func refreshTokenOnAuthFailure(request: Request) -> Request {
    return request.chained {
        guard case .failure(let error) = $0.response,  // Did request fail…
            error.httpStatusCode == 401 else {           // …because of expired token?
                return .useThisResponse                    // If not, use the response we got.
        }
        return .passTo(
            self.createAuthToken().chained {             // If so, first request a new token, then:
                if case .failure = $0.response {           // If token request failed…
                    return .useThisResponse                  // …report that error.
                } else {
                    //print($0.response)
                    return .passTo(request.repeated())       // We have a new token! Repeat the original request.
                }
            }
        )
    }
}
func userAuthData() -> [String: String] {
    return [
        "username": "username",
        "password": "password",
        "grant_type": "password",
        "client_id": "abc1234567",
        "client_secret": "1234567abc"
    ]

}

func createAuthToken() -> Request {
    print("requestingToken")
    return tokenCreationResource
        .request(.post, urlEncoded: userAuthData())
        .onSuccess {
            self.authToken = $0.jsonDict["access_token"] as? String  // Store the new token, then…
            print($0.jsonDict) //*****SEE MY NOTE BELOW ABOUT THIS LINE
            self.invalidateConfiguration()                    // …make future requests use it
    }
}

问题是它似乎没有设置 authToken 变量......在对 createAuthToken() 函数中的 $0.jsonDict 变量进行故障排除时,它似乎为空。行注明的印刷品[:]

如果我将其更改为print($0.jsonDict)print($0)我会看到完整的响应,包括“内容”部分,该部分显示了我希望在 jsonDict 中出现的结果

如果重要的话,我的服务器实现是使用 FOSOauthServerBundle 的 Symfony。如果我只是在浏览器中手动执行请求并且就像我说响应的“内容”显示我的令牌一样,所有这些都可以正常工作,我似乎无法通过.jsonDict["access_token"]

4

1 回答 1

0

示例代码有同样的问题 - 您需要删除

standardTransformers: [.text, .image]

来自服务构造函数(或包含 .json)。

于 2018-03-13T23:40:42.140 回答