2016-02-12 3 views
1

Je travaille avec la nouvelle API Lyft, dans la section Authentification, elle indique d'envoyer une requête pour un jeton d'accès et affiche un exemple de réponse, avec une clé appelée "jeton d'accès".Problèmes d'accès à la valeur clé dans la réponse JSON de NSURLSession (API Lyft)

Exemple de réponse

HTTP/1.1 200 OK 
Content-Type: application/json;charset=UTF-8 
Cache-Control: no-store 
Pragma: no-cache 
{ 
"access_token": <access_token>, 
"token_type":"bearer", 
"expires_in":3600, 
"scope": "public" 
} 

Pourtant, quand je fais l'appel (Oui, le ClientID et secret sont corrects, mais je ne peux pas les poster ici) il renvoie une réponse, mais le jeton d'accès est nul.

Merci pour l'aide comme toujours! lien Doc est ci-dessous,

docs API,

https://developer.lyft.com/docs/authentication

func authorize() { 

    let authString = NSString(format: "%@:@%", clientID, clientSecret) 
    let authData = authString.dataUsingEncoding(NSUTF8StringEncoding) 

    let base64String = authData!.base64EncodedDataWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength) 

    let url = NSURL(string: "https://api.lyft.com/oauth/token") 
    let request = NSMutableURLRequest(URL: url!) 

    request.HTTPMethod = "GET" 
    request.setValue("Basic \(base64String)", forHTTPHeaderField: "Authorization") 

    let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration()) 

    let task = session.dataTaskWithRequest(request) { (data, response, error) -> Void in 

     let dictionary = try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) 


     if let accessToken : String = dictionary["access_token"] as? String { 

      print(accessToken) 
     } 
    } 

    task.resume() 

} 
+0

Qu'est-ce qui se passe si vous appelez 'base64EncodedStringWithOptions' au lieu de' base64EncodedDataWithOptions'? – bringel

+0

Exactement la même chose arrive ... bien que j'ai découvert en parlant au personnel de soutien à Lyft que c'est censé être un "POST" et non "GET" bien que même alors je ne reçois pas la bonne réponse. – Echizzle

+0

@Echizzle: Je fais la même intégration, avez-vous des mises à jour à ce sujet. –

Répondre

0

base de la documentation Lyft, je pense pense que le format de votre chaîne de auth est erroné.

Je pense que vous devriez faire

let authString = NSString(format: "%@:@%", clientID, clientSecret), non

let authString = NSString(format: "%@, @%", clientID, clientSecret)

+0

Yea quelqu'un posté avant, mais a supprimé leur commentaire et je l'ai mis à jour, je reçois toujours une erreur de 400, bien que la demande a été reçue, mais il n'y a pas de jeton auth. – Echizzle

+0

Vous obtenez une erreur 400? Basé sur le bas de la page docs, il vous manque un paramètre grant_type. On dirait qu'il devrait être passé comme le corps de la demande. 'NSURLRequest' a une propriété' HTTPBody' de type 'NSData' – bringel

+0

Je viens de remarquer que, je l'ai inclus comme ça, mais ne fonctionne toujours pas ... ** let bodyDict: [String: AnyObject] = [" grant_type ": [ "client_credentials", "authorization_code", "refresh_token"], "scope": "public"] let dataExample: NSData = NSKeyedArchiver.archivedDataWithRootObject (bodyDict) request.HTTPBody = dataExample ** – Echizzle