Я пытаюсь выполнить некоторые запросы API (с учетными данными), используя URLSession.shared, однако он не работает должным образом.
Когда пользователь впервые вводит свои учетные данные, я устанавливаю их по умолчанию для сеанса, используяследующее.
let credential = URLCredential(user: username, password: password, persistence: .forSession)
URLCredentialStorage.shared.setDefaultCredential(credential, for: myProtectionSpace)
Затем я бы запустил первый URL-запрос, используя это.В этом примере предположим, что запрос пытается получить доступ к https://myapi.com/go.
URLSession.shared.dataTask(with: request) { (data, response, error) in
// do stuff
}.resume()
Это прекрасно работает, учетные данные передаются и все, пока мне не понадобится пользователь для выхода.Когда я сохраняю разные учетные данные, даже с неверным паролем, запрос на https://myapi.com/go все равно будет возвращаться, и вызов 401, похоже, не будет выдан.
Я перепробовал всеследующие вещи, и ничто, похоже, не удаляет учетные данные сеанса для этого конкретного URL.
// Attempt #1: doesn't work
URLSession.shared.reset {
// I confirmed this eliminates all credentials in the URLCredentialStorage.shared
// store updated credentials and fire off new request here
}
// Attempt #2: doesn't work
URLCredentialStorage.shared.remove(credential, for: myProtectionSpace)
URLSession.shared.invalidateAndCancel()
// store updated credentials and fire off new request here
// Attempt #3: doesn't work
URLCredentialStorage.shared.remove(credential, for: myProtectionSpace)
URLSession.shared.finishTasksAndInvalidate()
// store updated credentials and fire off new request here
Похоже, что сервер не выдает вызов 401 после первого успешного запроса к https://myapi.com/go, поэтому пересмотренныйучетные данные не привыкают.Я вынужден использовать пользовательский URLSession только из-за этого?