Поэтому я пытаюсь проверить, действителен ли канал-носитель перед каждым запросом, но когда я запускаю запрос токена refre sh, Alamofire получает исключение при предварительном условии отправки: Что я делаю неправильно? это вообще возможно?
extension Session: SessionStateProvider {
func request(for task: URLSessionTask) -> Request? {
dispatchPrecondition(condition: .onQueue(rootQueue))
return requestTaskMap[task]
}
Основной вызывающий запрос, где проверяется первый токен
private static func createRequest(urlConvertible: URLRequestConvertible)-> Alamofire.DataRequest?{
if let manager = sessionManager{
return manager.request(urlConvertible)
///custom manager that checks the tokens
}else if let manager = authenticatedManager{
manager.verifyRequest(url: urlConvertible) { (result) in
return result
}
}
return nil
}
/// This method make a request using the JSONAPI's Format - Only to the 'data' structure
///
/// - Parameter urlConvertible: Codabel Onject to parse teh response
/// - Returns: The Codable object if success or not
static func requestJSONAPI<T: Codable> (_ urlConvertible: URLRequestConvertible) -> Observable<T> {
initManager(urlConvertible: urlConvertible)
//Create an RxSwift observable, which will be the one to call the request when subscribed to
return Observable<T>.create { observer in
let request = createRequest(urlConvertible: urlConvertible)?
.debugLog()
.validate()
.responseCodableJSONAPI(keyPath: "data", completionHandler: { (response: AFDataResponse<T>) in
switch response.result {
case .success(let value):
let jsonDataString = String(data: response.data ?? Data(), encoding: String.Encoding.utf8)!
print("Post Request Params : \(jsonDataString)")
observer.onNext(value)
Вот мой код, где auth.refreshtokens получает новые токены с AF. запрос
private func shouldRefreshToken() -> Bool {
do {
let jwt = try decode(jwt: accessToken)
return jwt.expired
} catch {
}
return false
}
func verifyRequest(url: URLRequestConvertible, completion: @escaping (_ result: DataRequest) -> Void){
if shouldRefreshToken() {
let auth = interceptor
///makes an AF.request to get the new tokens - where it crashes
auth.refreshTokens { [weak self] succeeded, accessToken, refreshToken in
self?.accessToken = accessToken!
completion((self?.sessionManager?.request(url))!)
}
}else{
completion((self.sessionManager?.request(url))!)
}
}
´´´