7
votes

Uber non valide Oauth 2.0 Critings fournissait une authentification Uber dans iOS Swift

Je suis implémentant le Demande de la requête de Uber dans mon iOS (Swift) App. L'API de la demande / Point d'extrémité requiert l'authentification de l'utilisateur avec l'application, voici le DOC .

Pour cela, j'utilise ce bibliothèque OAUTH2.0 P >

Qu'est-ce que j'ai fait est p>

  1. intégré avec succès la bibliothèque de mon projet (Xcode) à l'aide d'instructions d'installation données. p> li>

  2. dans mon appdelegate p>

    response = <NSHTTPURLResponse: 0x1a284b50> { URL: https://sandbox-api.uber.com/v1/requests } { status code: 401, headers {
    "Content-Length" = 75;
    "Content-Type" = "application/json";
    Date = "Mon, 27 Apr 2015 10:22:01 GMT";
    Server = nginx;
    "Strict-Transport-Security" = "max-age=31536000; includeSubDomains; preload";
    "x-uber-app" = "uberex-sandbox";
    "x-xss-protection" = "1; mode=block";
    } }
    responseString = Optional({"message":"Invalid OAuth 2.0 credentials provided.","code":"unauthorized"})
    
  3. dans ma méthode didfinishlaunchingwithOptions code> de Appdelegate P>

    func callRequestAPI(url:String){
    
        let request = appDelegate.oauth.request(forURL: NSURL(string:url)!)
    
    
    
        request.HTTPMethod = "POST"
    
    
        let postString = "product_id="+selectedUberProductId+"&start_latitude="+start_lat+"&start_longitude="+start_lng+"&end_latitude="+end_lat+"&end_longitude="+end_lng
    
        println(postString)
    
    
        let tempData: NSData = appDelegate.oauth.accessToken.dataUsingEncoding(NSUTF8StringEncoding)!
        let base64LoginString = tempData.base64EncodedStringWithOptions(nil)
    
        request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
        request.addValue("application/json", forHTTPHeaderField: "Content-Type")
        request.addValue("application/json", forHTTPHeaderField: "Accept")
    
    
    
    
       request.setValue("Bearer \(base64LoginString)", forHTTPHeaderField: "Authorization")
    
        let session = NSURLSession.sharedSession()
    
        let task = session.dataTaskWithRequest(request) { data, response, error in
    
    
            if error != nil {
                println("error=\(error)")
                return
            }
    
            println("response = \(response)")
    
            let responseString = NSString(data: data, encoding: NSUTF8StringEncoding)
            println("responseString = \(responseString)")
    
        }
        task.resume()
    }
    
  4. N'oubliez pas d'enregistrer le schéma URL i.e ( "redirect_uris": ["Jamesappv2: // oauth / rappel"] p> l> li> OL>

    GOTO Target de votre application -> onglet Info -> Types d'URL -> Cliquez sur (+), image ci-jointe P>

     Entrez la description de l'image ici p>

    1. dans l'appdelegate Ajouter une méthode donnée ci-dessous et gérer l'URL de rappel P>

      curl -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' 'https://api.uber.com/v1/products?latitude=37.7759792&longitude=-122.41823'
      
    2. MAINTENANT DANS MON VIEWCONTROLLER, j'ai aimé cela sur MyBTNClick P>

          OAuth2: Handling redirect URL jamesappv2://oauth/callback?state=4B0EB812&code=0sXXXXXXTX7yEbS1XXXXXHuw
      OAuth2: Successfully validated redirect URL
      OAuth2: Authorizing against https://login.uber.com/oauth/token?state=38158941&grant_type=authorization_code&code=0sXXXXXXXX1jxTrdFQT9Huw&client_secret=EIXXXXXXXNCa_Wez6XXXXXw0BlnrXtxus&client_id=fXXXXXXXy2LOUo9vtKXXXXXQ1nUDO&redirect_uri=jamesappv2%3A%2F%2Foauth%2Fcallback
      OAuth2: Exchanging code 0swNXXXXX7yXXXXXXdFQT9Huw with redirect jamesappv2://oauth/callback for token at Optional("https://login.uber.com/oauth/token")
      OAuth2: Did receive access token: Dfq3XXXXXXuWgpaqFXXXXXXXgXW, refresh token: EmStT7FEXHRMlS8odPzs1nsha0ObjK
      Did authorize with parameters: [token_type: Bearer, expires_in: 2592000, access_token: XXXXXXOZuWgXXXXXXXXuJYOmgXW, refresh_token: EXXXXXHRMlS8oXXXXXXXa0ObjK, scope: profile, last_authenticated: 1430121470]
      


4 commentaires

Regardez la demande avec Charles, vous avez peut-être repérer l'erreur.


désolé yene je ne vous obtiens pas.


@Qadirhussain Charles est un outil de surveillance réseau. Cela facilite la recherche de ce qui est renvoyé à partir de votre simulateur et du serveur.


@Chackle merci pour la clairance


3 Réponses :


0
votes

Pour utiliser le jeton, suivez l'étape 5 des instructions de la bibliothèque code> oauth2 code>, comme vous l'avez fait avant de commencer à essayer de le signer vous-même une seconde fois. La demande a déjà été signée et dispose de la configuration du jeton au porteur, il n'y a plus rien à faire pour vous:

let url = NSURL(string: "https://api.uber.com/v1/products?latitude=37.7759792&longitude=-122.41823")
let req = appDelegate.oauth.request(forURL: url)

// customize your request, if needed. E.g. for POST:
req.HTTPMethod = "POST"

// send the request
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(req) { data, response, error in
    if nil != error {
        // something went wrong
    }
    else {
        // check the response and the data
        // you have just received data with an OAuth2-signed request!
    }
}
task.resume()


3 commentaires

Oui mais je dois envoyer une demande postale. Lorsque j'envoie la demande postale du point de terminaison du pilote, le code est donné ci-dessus, il me renvoie {"Message": "Critiques OAuth 2.0 non valides fournies.", "Code": "non autorisé"} :(


J'ai le même problème. Comment puis-je envoyer les informations d'identification OAuth 2.0? J'ai reçu le jeton d'accès mais comment l'utiliser?


Si vous faites APPDELEGATE.OAUTH.RQUEST (URL FORURL: URL) , les informations d'identification sont déjà incluses dans la demande. J'ai mis à jour l'exemple pour vous montrer où vous pouvez personnaliser votre demande.



4
votes

Enfin je l'ai fait :)

J'ai changé la méthode comme ci-dessous et que cela a fonctionné p>

{
  driver = "<null>";
  eta = 15;
  location = "<null>";
  "request_id" = "ea39493d-b718-429f-8710-00a34dcdaa93";
  status = processing;
  "surge_multiplier" = 1;
  vehicle = "<null>";
}


4 commentaires

Quels changements avez-vous faits dans cette méthode?


@Jagdeep S'il vous plaît voir le callrequestapi () dans ma question et comparer avec la même chose dans ma réponse. Vous voyez les différences :)


Je peux identifier rapidement deux différences qui sont le contenu de Publier et d'en-tête. Est-ce exact ?


Comment avez-vous autorisé le compte Uber de l'utilisateur avec votre application? J'essaie de trouver des exemples de la manière dont cela se fait et que cela ne peut pas le trouver nulle part.



1
votes

mis à jour pour SWIFT 2. J'ai utilisé la même configuration et la même bibliothèque pour OAuth que Qadir décrit dans sa question. J'ai mis à jour sa demande de travail à Swift 2. J'espère que cela aide les autres.

UberRequest: P>

Result -> Optional(["driver": <null>, "request_id": 5834384c-7283-4fe6-88a7-e74150c6ab30, "surge_multiplier": 1, "location": <null>, "vehicle": <null>, "status": processing, "eta": <null>])


0 commentaires