Я пытаюсь загрузить zip-файл и сохранить его с сервера с помощью аутентификации токена JWT благодаря Alamofire .Загрузка работает хорошо без аутентификации токена, файл успешно сохранен.Когда я активирую аутентификацию на стороне сервера (используя Passport.js с NodeJS), я всегда получаю 401. Я присоединяю токен к заголовку с помощью функции адаптера sessionManager.Запрос других (post, get с использованием sessionManager.request (..)) хорошо работает с этим механизмом аутентификации.
Вопрос: можем ли мы изменить заголовок функции загрузки Alamofire?Если да, то как?
Любые советы приветствуются
func getZip(){
let sessionManager = Alamofire.SessionManager.default
let authHandler = JWTAccessTokenAdapter(accessToken: Auth.getAccessToken())
sessionManager.retrier = authHandler
sessionManager.adapter = authHandler
let downloadUrl: String = Auth.getApiEndpoint() + "get_zip"
let destinationPath: DownloadRequest.DownloadFileDestination = { _, _ in
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0];
let fileURL = documentsURL.appendingPathComponent("myZip.zip")
return (fileURL, [.removePreviousFile, .createIntermediateDirectories])
}
sessionManager.download(downloadUrl, method: .get, encoding: URLEncoding.httpBody, to: destinationPath)
.downloadProgress { progress in
print(">> Zip Download Progress: \(progress.fractionCompleted)")
}
.responseData { response in
switch response.result{
case .success:
if response.destinationURL != nil, let filePath = response.destinationURL?.absoluteString {
print("success & filepath : \(filePath)")
completionHandler(filePath, true)
}
break
case .failure:
print("faillure")
completionHandler("", false)
break
}
}
}
}
Адаптер JWT:
class JWTAccessTokenAdapter: RequestAdapter {
typealias JWT = String
private var accessToken: JWT
func adapt(_ urlRequest: URLRequest) throws -> URLRequest {
var urlRequest = urlRequest
if let urlString = urlRequest.url?.absoluteString, urlString.hasPrefix(Auth.getApiEndpoint()) {
/// Set the Authorization header value using the access token.
urlRequest.setValue(accessToken, forHTTPHeaderField: "Authorization")
}
return urlRequest
}
}
Вывод:
response: SUCCESS: 12 bytes // (Unauthorized) -> Corrupted zip file