Basic-Authentifizierung mit Alamofire

Ein Problem bei der Authentifizierung mit Basic Auth. Ich bin mit einem standard-enum-entspricht URLRequestConvertible Protokoll zu konstruieren, die meine Anfragen. Das Problem ist, wenn ich manuell den authorization-Header in der enum-wie so:

    let user = ***
    let password = ***

    let credentialData = "\(user):\(password)".dataUsingEncoding(NSUTF8StringEncoding)!
    let base64Credentials = credentialData.base64EncodedStringWithOptions([])

    mutableURLRequest.setValue("Basic \(base64Credentials)", forHTTPHeaderField: "Authorization")

Bekomme ich immer einen 401 unauthorized Antwort. Jedoch wenn ich das Passwort über die authenticate callback-wie so:

    Alamofire.request(request)
        .authenticate(user: "USERNAME_HERE", password: "PASSWORD_HERE")
        .responseJSON { (response) -> Void in
            print("JSON response \(response)")
            completion(success: true, error: nil)
    }

Er authentifiziert richtig. Ich möchte in der Lage sein, um es manuell in der enum-konforme URLRequestConvertible statt übergeben Sie die Anmeldeinformationen in authenticate.

Ich weiß, dass es mit einem NSURLCredential unter der Haube für die auth Herausforderungen, aber ich möchte in der Lage sein, um es manuell.

Hier ist mein URLRequestConvertible Umsetzung :

enum CheckedUpAPI: URLRequestConvertible {
    static let baseURLString = "https://***"
    static let APIKey = "***"
    static let APIClientName  = "iPad"


    case UpdatePatient(String, [String: AnyObject])


    var method: Alamofire.Method {
        switch self {
        case .UpdatePatient:
            return .PATCH
        }
    }

    var path: String {
        switch self {
        case .UpdatePatient(let patientID, _):
            return "patients/\(patientID)"
        }
    }

    //MARK: URLRequestConvertible

    var URLRequest: NSMutableURLRequest {
        let URL = NSURL(string: CheckedUpAPI.baseURLString)!
        let mutableURLRequest = NSMutableURLRequest(URL: URL.URLByAppendingPathComponent(path))
        mutableURLRequest.HTTPMethod = method.rawValue


/**
        We are not setting any authorization headers since they requests return 401
        the `authenticate` function on Alamofire.request does the trick

        let user = "[email protected]"
        let password = "test"

        let credentialData = "\(user):\(password)".dataUsingEncoding(NSUTF8StringEncoding)!
        let base64Credentials = credentialData.base64EncodedStringWithOptions([])

        mutableURLRequest.setValue("Basic \(base64Credentials)", forHTTPHeaderField: "Authorization")
*/
        mutableURLRequest.setValue(CheckedUpAPI.APIKey, forHTTPHeaderField: "API-Key")

        switch self {
        case .UpdatePatient(_, let parameters):
            return Alamofire.ParameterEncoding.JSON.encode(mutableURLRequest, parameters: parameters).0
        }
    }
}
  • Bitte teilen Sie, wie Sie machen Sie Ihre Anfrage mit Ihrem mutableURLRequest header mit Alamofire
  • Getan. Die manuelle Einstellung der Header ist auskommentiert, da es nie funktionierte. aber das ist, was ich versucht habe und es nicht funktionieren würde, wenn mit der authenticate Funktion von Alamofire
  • irgendeine Idee?
Schreibe einen Kommentar