Как войти снова после перенаправления на / войти без каких-либо ошибок http - PullRequest
0 голосов
/ 18 мая 2019

У меня есть приложение, которое аутентифицируется на веб-сайте без какого-либо API, просто на страницу входа, а затем сохраняю куки для следующих запросов.

Проблема в том, что происходит, когда сеанс или файлы cookie истекли, веб-сайт перенаправляет на / логин с HTTP 200. (У меня нет доступа к веб-сайту.)

Я использую библиотеку Alamofire, она включает «Адаптацию и повторные запросы» и хороша для таких вещей, как OAuth, но не для моего случая, потому что RequestRetrier вызывается только для некоторых кодов ошибок HTTP, и я всегда получаю OK 200.

Я могу только перехватить URL перенаправления, и если он содержит "/ login", то я знаю, что сессия истекла.

Я пытался использовать taskWillPerformHTTPRedirection примерно так

delegate.taskWillPerformHTTPRedirection = { session, task, response, request in

var f_request = request  

if (request.url!.absoluteString.contains("login.jsp")) {

  loginAgain(){
   // After successfully login return the original request.
    f_request = task.originalRequest
 }

return f_request
}

Но, конечно, запрос на вход в систему является асинхронным вызовом, поэтому вход в систему выполняется после исходного запроса.

Как мне это сделать? Синхронный вход в систему? я скучаю по Аламофиру?

1 Ответ

0 голосов
/ 18 мая 2019

Хорошо, я не знал о существовании: "taskWillPerformHTTPRedirection WithCompletion "

так что .. проблема решена.

delegate.taskWillPerformHTTPRedirectionWithCompletion = { session, task, response, request, completion in

 if(needLoginLogic){

  login_bg(){ (result) in
    switch result {
     case .success:
      // Make the original request inteast of "/login" request
      completion(task.originalRequest)
      break

     case .failure(let error):
      // Catch error later.
      completion(request)
      break
    }

  }

 }else{
 // Just make the request
 completion(request)
 }

}

...