2016-04-11 7 views
0

Meine Frage ist entlang der Linie einer Frage, die zuvor bei Previous question gefragt wurde.io9 - Alamofire-Token-Anfrage schlägt mit 401 Fehler depsite curl von debugPrint funktioniert

Ich benutze Alamofire 3.2.1, XCode 7.3, iOS9.

Hier ist mein Code mit der Absicht, einen Token von OAuth-Server (localhost) von django oauth Toolkit implementiert zu erhalten:

Druck
let params = ["grant_type": "password", 
        "username": "rosa", 
        "password": "rosa1234"] 

    let request = Alamofire.request(.POST, url, parameters: params).authenticate(user: __clientID, password: __clientSecret) 

    debugPrint(request) 

    request.validate(statusCode: 200..<300) 
     .validate(contentType: ["application/json"]) 
     .responseSwiftyJSON({ (request, response, json, error) in 
      debugPrint(response) 

      if (error != nil) { 
       print(error.debugDescription) 
       return completionHandler(token: nil, error: error) 
      } 

      // call the completionHandler function (object) to deal with data further 
      return completionHandler(token: json.string, error: nil) 
     }) 

Die Debug der Anfrage einer Arbeits curl Befehl gibt, die auf einem Befehl funktioniert Zeile:

curl -i \ 
-X POST \ 
-u PrtRUN9ra7LHCYWbiReaAjO9I26lJhLhRSAUJgtr:kTvxqKmClDAL3tbdyZdyBZgsfsfXtagMpZyFjSZwpIknxM43l6ZIvJxJGXu2J2FuHf4JMLfopDoAzkF6vHSRq4GZkbnEZSmmUnMvkhMvSucbhWUdzCpxuj9qtc8beaQ3 \ 
-H "Content-Type: application/x-www-form-urlencoded; charset=utf-8" \ 
-H "User-Agent: IntelliCafe/xsoft.IntelliCafe (1; OS Version 9.3 (Build 13E230))" \ 
-H "Accept-Encoding: gzip;q=1.0, compress;q=0.5" \ 
-H "Accept-Language: en-US;q=1.0" \ 
-d "grant_type=password&password=rosa1234&username=rosa" \ 
"http://localhost:8000/o/token/" 

Aber der Code funktioniert nicht in meiner App. Der Fehler ist 401:

Optional(<NSHTTPURLResponse: 0x7d183950> { URL: http://localhost:8000/o/token/ } { status code: 401, headers { 
    "Cache-Control" = "no-store"; 
    "Content-Type" = "application/json"; 
    Date = "Mon, 11 Apr 2016 20:43:48 GMT"; 
    Pragma = "no-cache"; 
    Server = "WSGIServer/0.1 Python/2.7.10"; 
    "X-Frame-Options" = SAMEORIGIN;} }) 
Optional(Error Domain=com.alamofire.error Code=-6003 "Response status code was unacceptable: 401" UserInfo={NSLocalizedFailureReason=Response status code was unacceptable: 401}) 

Dieses Problem macht mich verrückt. Jede Hilfe wird dankbar sein!

Vielen Dank im Voraus.

Antwort

0

Ich schrieb eine Django-Rest-Ansicht, um die Metadaten der Anfrage auszudrucken und fand heraus, dass die clientID und clientSecret von der Django-Server-Implementierung nicht richtig eingebettet/verarbeitet werden.

Die Verwendung des Authorization-Headers, wie in der Alamofire-Dokumentation gezeigt, funktioniert.