gpt4 book ai didi

ios - Oauth 失败后的 AlamoFire 重试请求

转载 作者:可可西里 更新时间:2023-11-01 02:20:27 25 4
gpt4 key购买 nike

为此绞尽脑汁。我有一个使用 OAuth2 的应用程序,我在其中请求一个过期的 token 。我试图找出检查过期的最佳方法,如果过期,请在发送新 API 请求之前请求一个新 token 。我有一个来自 AlamoFire 的 Router 类的枚举,它检查访问 token ,如下所示:

UserManager.getUser()?.getUserAccessToken()

该方法看起来像:

    func getUserAccessTokenForRequest() -> String? {
if isTokenValid() {
return self.accessToken
}
else {
var localAccessToken : String?
let request = DataManager.currentRequest as Request?
DataManager.currentRequest?.cancel()
DataManager.refreshToken{ (success, value) in
if success {
if let returnedToken : String = value as? String {
request?.resume()
}
} else {
if let localError: AnyObject = value {
}
}
}
return nil;
}
}

然而,当我去恢复初始请求时,它是零,因为它已经完成并收到 token 无效的响应。我遇到了异步任务在我也想要它们之前完成的问题(因为它们是异步的)。我想知道最好的架构是什么样的。我什至可以在发出请求之前检查 token 在我的数据管理器中是否有效。但是我不想每次通话都这样做。

覆盖创建请求方法是最好的方法吗?

最佳答案

更新:

刚刚发现: Alamofire : How to handle errors globally

原始答案:

我刚才用 AFNetworking 做了类似的事情,我想你可以为 Alamofire 实现这样的事情:

// if token was expired refresh it and retry
private class func refreshTokenAndRetry(operation: AFHTTPRequestOperation, success: (response: AnyObject!) -> Void, failure: (error: NSError!) -> Void) {
Client.refreshToken(
success: { (credential: AFOAuthCredential!) -> Void in
if credential != nil {
println("Refreshed token and retrying operation")
var request = operation.request.mutableCopy() as! NSMutableURLRequest
request.addValue(nil, forHTTPHeaderField: "Authorization")
request.addValue("Bearer \(credential.accessToken)", forHTTPHeaderField: "Authorization")
let retryOperation = requestOperationManager.HTTPRequestOperationWithRequest(
request,
success: { (operation: AFHTTPRequestOperation!, responseObject: AnyObject!) in
success(response: responseObject)
},
failure: { (operation: AFHTTPRequestOperation!, error: NSError!) in
failure(error: error)
}
)
retryOperation.start()
}
},
failure: { (error) -> Void in
failure(error: error)
}
)
}

您缺少的是创建原始请求的可变副本,然后在 header 中设置 token 并使用新请求创建新操作。

关于ios - Oauth 失败后的 AlamoFire 重试请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31011284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com