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"]
访问它
示例代码有完全相同的问题 - 您需要删除
standardTransformers: [.text, .image]
来自服务构造函数(或包含 .json(。