Swift和Siesta都是新手......尝试制作“密码”授权类型请求。我使用位于here的代码(最底部的块)。我的代码是:
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"]
答案 0 :(得分:0)
示例代码存在同样的问题 - 您需要删除
standardTransformers: [.text, .image]
来自Service构造函数的(或包含.json)。