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

时间:2017-08-02 01:45:59

标签: siesta-swift

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"]

访问它

1 个答案:

答案 0 :(得分:0)

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

standardTransformers: [.text, .image]
来自Service构造函数的

(或包含.json)。