Я использую очередь Alamofire в func при вызове другого класса
как использовать очередь в alamofire при истечении срока действия токена? (Код ответа == 401)
i 5 раз вызывается NetworkRequestClass.requestв момент и когда срок действия маркера обновления истекает, аварийный токен аварийно завершает работу и возвращает все остальные запросы. Код ответа 401 Может ли кто-нибудь помочь мне исправить этот код?
func internet() -> Bool
{
return Connectivity.isConnectedToInternet()
}
//func .get with parameters
func request(url:String,method:HTTPMethod,parameters:Parameters,intHeaders:Int,completions: @escaping returnService) {
if UserDefaults.standard.bool(forKey: "progressRequset") == false {
UserDefaults.standard.set(true, forKey: "progressRequset")
if self.internet() == true {
if intHeaders == 0 {
self.headers = nil
}
else if intHeaders == 1
{
self.headers = ["Authorization": "bearer " + UserDefaults.standard.string(forKey: "token")!]
}
func req() {
Alamofire.request(url, method: method, parameters: parameters,headers: self.headers).validate().responseJSON() { response in
let responseCode = response.response?.statusCode ?? 0
if responseCode == 200 {
self.coutProgressRequest = 0
if let jason = response.result.value as? Dictionary<String, Any>
{
completions(jason,responseCode)
}
UserDefaults.standard.set(false, forKey: "progressRequset")
return
}
else if responseCode == 401 {
self.refreshToken() { (jsonRefresh, codeRefresh) in
if codeRefresh == 200 {
req()
return
}
else if codeRefresh == 401
{
UserDefaults.standard.set(false, forKey: "progressRequset")
completions(nil,401)
return
}
else {
UserDefaults.standard.set(false, forKey: "progressRequset")
}
}
}
else if responseCode == 403
{
UserDefaults.standard.set(false, forKey: "progressRequset")
completions(nil,responseCode)
return
}
else if responseCode == 0
{
UserDefaults.standard.set(false, forKey: "progressRequset")
completions(nil,responseCode)
return
}
else
{
UserDefaults.standard.set(false, forKey: "progressRequset")
completions(nil,1000)
return
}
}
}
req()
}
else {
UserDefaults.standard.set(false, forKey: "progressRequset")
completions(nil,1001)
return
}
}
}
//func end
func refreshToken(completions: @escaping returnService) {
Alamofire.request(self.urlStringRefreshToken, method: .post,parameters: self.parametersRefreshToken,encoding: JSONEncoding.default, headers: self.headers).validate().responseJSON { response in
print("refresh token",response.response?.statusCode ?? 0)
if response.response?.statusCode == 200 {
let ObjectTwo = response.result.value as? Dictionary<String,Any>
if let accesstoken = ObjectTwo?["access_token"] as? String {
if let refreshtokenTwo = ObjectTwo?["refresh_token"] as? String {
UserDefaults.standard.set(refreshtokenTwo , forKey: "refreshToken")
UserDefaults.standard.set(accesstoken , forKey: "token")
if UserDefaults.standard.string(forKey: "token") == accesstoken {
self.headers = ["Authorization": "bearer " + UserDefaults.standard.string(forKey: "token")!]
if self.headers == ["Authorization": "bearer " + UserDefaults.standard.string(forKey: "token")!] {
completions(nil,200)
return
}
}
}
}
}
else if response.response?.statusCode == 401
{
completions(nil,401)
return
}
else
{
completions(nil,1000)
}
}
}
}
вызывается в другом классе:
let NetworkRequestClass = NetworkRequest()
NetworkRequestClass.request(url: urlString, method: .get, parameters: parameters,intHeaders:1) {
(json,code) in ... }