So I'm trying to check if the bearer is valid before before each request, but when I run the refresh token request Alamofire gets an exception on dispatch precondition: What am I doing wrong? is this even possible?
extension Session: SessionStateProvider {
func request(for task: URLSessionTask) -> Request? {
dispatchPrecondition(condition: .onQueue(rootQueue))
return requestTaskMap[task]
}
Main caller of the request where first the token is checked
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)
Here is my code where auth.refreshtokens gets the new tokens with an AF.request
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))!)
}
}
´´´