通过密码授予使用Siesta获取AuthToken



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(。

相关内容

  • 没有找到相关文章

最新更新