Search code examples
iosswiftoauth-2.0alamofireeventbrite

Alamofire doesn’t send Authorization header to eventbrite


I'm trying to query the eventbrite using Alamofire, but there's an error in the form of the result

[Result]: SUCCESS: {
    error = "NO_AUTH";
    "error_description" = "An OAuth token is required for all requests";
    "status_code" = 401;
}

My first variant

 func getAdditionalInfo(_ urlPath: String) {
        DispatchQueue.global(qos: .background).async {
            let headers: HTTPHeaders = [
            "Authorization" : "Bearer 34832udsfsdjkfds" // 34832udsfsdjkfds is fake 
            ]

            Alamofire.request(urlPath, method: .get, parameters: nil, encoding: URLEncoding.default, headers: headers).responseJSON(completionHandler: { (response) in
                debugPrint("EventbriteAPIManager response", response)
                if response.result.error == nil {

                } else {
                    guard let error = response.result.error else { return }
                    debugPrint(error)
                }
            })
        }
    }

My second variant

func getAdditionalInfo(_ urlPath: String) {
    DispatchQueue.global(qos: .background).async {
        let sessionManager = SessionManager.default
        sessionManager.session.configuration.httpAdditionalHeaders = [
            "Authorization" : "Bearer 34832udsfsdjkfds" // 34832udsfsdjkfds is fake 
        ]

        request(urlPath, method: .get, parameters: nil, encoding: URLEncoding.default).responseJSON(completionHandler: { (response) in
            debugPrint("EventbriteAPIManager response", response)
            if response.result.error == nil {

            } else {
                guard let error = response.result.error else { return }
                debugPrint(error)
            }
        })
    }
}

I tried to make this request using Postman, and everything works. How can I fix it? Thanks.


Solution

  • I changed my request and it works for me. The problem was that eventbrite token should not be sent to the headers, but added to the URL (which is most interesting if you test it in postman, then it works if the token is sent to the headers).

    private func getEventbriteLocation(_ urlPath: String, success: ((_ eventbriteModel: EventbriteLocationModel) -> Void)?, fail: ((_ error: Error) -> Void)?) {
        DispatchQueue.global(qos: .background).async {
            guard let BackendTokensModel = BackendAPIManager.shared.BackendTokensModel else {
                BackendAPIManager.shared.getTokens(success: { (tokenModel) in
                    self.getEventbriteLocation(urlPath, success: success, fail: fail)
                }, fail: nil)
                return
            }
    
            let rightURL = urlPath.appending("/?token=\(BackendTokensModel.eventbrite)")
            AlamofireManager.shared.request(rightURL, method: .get).responseJSON(completionHandler: { (response) in
                if response.result.error == nil {
                    guard let json = response.result.value as? [String : Any] else { return }
                    guard let eventbriteModel = Mapper<EventbriteLocationModel>().map(JSON: json) else { return }
                    success?(eventbriteModel)
                } else {
                    guard let error = response.result.error else { return }
                    debugPrint(error)
                    fail?(error)
                }
            })
        }
    }