使用 Alamofire 重试计数和重试请求快速刷新令牌

问题描述

我使用 Alamofire 来集成 API 调用,处理错误代码和特殊状态代码错误,如 401403。我还创建了 getRefreshToken() 函数,如果出现错误,它将刷新令牌。

我面临的关于 Alamofire.retryCount 的问题并以正确的方式重复请求?我看过不同的参考资料,但我不知道我是如何集成到我的主要方法中的。

更新:添加getRefreshToken() 代码

我的代码

@objc private func getDataFromWeb(params:NSMutableDictionary,callback:@escaping (_ success:Bool,_ result:Any?)->(Bool)) -> Void {
        var method = HTTPMethod.get
        var encoding = URLEncoding.default as ParameterEncoding
        if(params["Method"] as! String == "POST"){
            method = HTTPMethod.post
            encoding = Alamofire.JSONEncoding.default
        }       
        
        Alamofire.request(url,method:method,parameters:pr,encoding:encoding,headers:[ "Accept":"application/json","Authorization":"Bearer \(token ?? "")"])
            .downloadProgress(closure: { (progress) in
            //progress closure
            })
            .validate(statusCode: 200..<300)
            .response { response in
                 print(response.error?.localizedDescription)
                 var code = response.response?.statusCode
                
                if code == 401 || code == 403{
                    
                    self.getRefreshToken()    // calling refresh token method
                    
                    
                } else {
                if(callback(response.data?.count != 0,response.data)){
                    
                    }
                }
                
        }
        
    
    }

getRefreshToken 函数


func getRefreshToken() {
        
        DataProvider.main.serviceLogin(username:User,password:Pass,firmNo: FirmId,callback:{success,result in
                            do{
                                if(success){
                                    let model = try JSONDecoder().decode(Login.self,from: result as! Data)
                                    if model.isSuccess == true {

                                        DataProvider.main.token = model.token
                                        

                                    }

                                    return true

                                    } else{

                                    return false
                                    }
                                
                            }catch let e {
                                    print(e)

                                    return false
                                }
            
        })
    }

参考文献:

https://stackoverflow.com/questions/58496713/retry-the-old-request-with-new-refresh-token-in-swift-alamofire

https://stackoverflow.com/questions/52287882/right-way-to-refresh-the-token

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)