Ein Problem beim Authentifizieren mit Basic Auth. Ich verwende ein Standard-Enum, das dem Protokoll URLRequestConvertible
entspricht, um meine Anfragen zu erstellen. Das Problem ist, dass, wenn ich manuell die Berechtigungsüberschriften in der ENUM-Set wie so:Grundlegende Authentifizierung mit Alamofire
let user = ***
let password = ***
let credentialData = "\(user):\(password)".dataUsingEncoding(NSUTF8StringEncoding)!
let base64Credentials = credentialData.base64EncodedStringWithOptions([])
mutableURLRequest.setValue("Basic \(base64Credentials)", forHTTPHeaderField: "Authorization")
ich immer eine 401 nicht autorisierte Antwort. jedoch wenn stelle ich das Passwort des authenticate
Rückruf wie so mit:
Alamofire.request(request)
.authenticate(user: "USERNAME_HERE", password: "PASSWORD_HERE")
.responseJSON { (response) -> Void in
print("JSON response \(response)")
completion(success: true, error: nil)
}
Es richtig authentifiziert. Ich möchte es in der enum entsprechend URLRequestConvertible
manuell setzen können, anstatt die Berechtigungsnachweise in authenticate
zu übergeben.
Ich weiß, es ist mit einem NSURLCredential
unter der Haube für Auth Herausforderungen, aber ich möchte in der Lage sein, es manuell einzustellen.
Hier ist meine 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 authentifizieren, wie Sie Ihre Anfrage mit Ihrem 'mutableURLRequest machst' Header mit Alamofire –
@VictorSigler Fertig. Die manuelle Einstellung der Header ist auskommentiert, da sie nie funktioniert hat. aber das ist, was ich versuchte, und es würde nicht funktionieren, wenn die 'authenticate' Funktion von' Alamofire' –
@VictorSigler irgendeine Idee? –