Аутентификация JWT с функцией загрузки Alamofire - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь загрузить 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

1 Ответ

0 голосов
/ 13 декабря 2018

Без шага validation в вашей цепочке запросов все ответы будут считаться успешными.Поэтому проверьте код ответа (или просто добавьте .validate() перед responseData) и посмотрите, действительно ли ваш запрос успешен.Кроме того, вы можете дважды проверить кодировку параметров, хотя вы, похоже, не отправляете никаких параметров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...