我尝试管理 rxswift 和 Alamofire 以获得响应。
当令牌未过期时,这些函数会成功获得响应。
但是当令牌过期时,我不知道如何刷新令牌然后重试使用新令牌获得响应。
我应该怎么做才能刷新令牌并重试?
我还阅读了 Alamofire 文档,发现“RequestAdapter”和“RequestRetrier”。
我应该在我的情况下使用 RequestAdapter 和 RequestRetrier 吗?
但我不知道如何在我的“getRequestJSON”函数中使用它们,
或者有什么好主意来刷新令牌并重试。
谢谢。
func get(_ callback: @escaping (JSON) -> Void) {
let url = "http://106.xx.xxx.xxx/user"
self.getRequestJSON( .get, url: url, params: [:], callback: { json in
callback(json)
})
}
func getRequestJSON(_ method: Alamofire.HTTPMethod, url:String, params:[String:Any] = [:], callback: @escaping (JSON) -> Void) {
var headers:[String:String] = [String:String]()
if token.isEmpty == false {
headers["Authorization"] = "Bearer \(token)"
}
let configuration = URLSessionConfiguration.default
configuration.httpAdditionalHeaders = SessionManager.defaultHTTPHeaders
configuration.timeoutIntervalForRequest = timeout
_ = SessionManager(configuration: configuration)
.rx.responseJSON(method,
url,
parameters: params,
encoding: ((method == .get) ? URLEncoding.default : JSONEncoding.default),
headers: headers)
.subscribeOn(SerialDispatchQueueScheduler.init(qos: .background))
.subscribe(onNext: { (r, data) in
if r.statusCode == 401 {
//token fail
}
let json = JSON(data)
if json["status"].stringValue == "successful" {
callback(json)
}else {
callback(json)
}
}, onError: { (error) in
callback(JSON(error))
})
.addDisposableTo(ResfulAPIDisposeBag)
}