2017-03-16 2 views
0

Ich versuche, Benutzer in meiner php app zu 23 und Me API, aber Probleme, wenn Sie versuchen, die bereitgestellten Token zu verwenden. Ich kann erfolgreich das Token mit der folgenden http Aktion erhalten:23 und Me API mit Guzzle 401 Ungültiges Token

<a href="https://api.23andme.com/authorize/?redirect_uri={{ env('APP_URL') }}/receive_code/&response_type=code&client_id={{ env('DNA_ID') }}&scope=basic names email">Connect with 23andMe</a> 

Welche der folgenden Controller leitet und gibt erfolgreich ein Token, das ich in der Benutzer-Tabelle speichern:

public function connectDNA() 
{ 

    $code = $_GET["code"]; 

    $client = new Client(); 
    $result = $client->post('https://api.23andme.com/token/', [ 
     'form_params' => [ 
     'client_id' => env('DNA_ID'), 
     'client_secret' => env('DNA_SECRET'), 
     'grant_type' => 'authorization_code', 
     'code' => $code, 
     'redirect_uri' => 'http://localhost:8000/receive_code/', 
     'scope' => 'basic names email' 
     ] 
    ]); 

    $contents = $result->getBody()->getContents(); 
    $contents = json_decode($contents); 

    $user = Auth::user(); 
    $user->dna_token = $contents->access_token; 
    $user->save(); 

    return redirect('/home'); 

} 

Das Problem ist, wenn ich versuchen Sie, dieses Token zu verwenden, um auf die 23 und mich API mit guzzle zuzugreifen, die ich vermute, weil ich nicht weiß, wie man den Anruf strukturiert. Ich habe mehrere Variationen auf dem folgenden versucht:

$result = $client->get('https://api.23andme.com/3/account/', [ 
      'Authorization' => $user->dna_token 
     ]); 

return $result; 

UPDATE: Das Problem scheint zu sein, wie ich guzzle formatiere. Wenn ich locke:

curl "https://api.23andme.com/3/account/" \ > -H "Authorization: Bearer demo_oauth_token" 

Die API gibt ein Testergebnis zurück, wie würde ich das oben in Guzzle formatieren?

Antwort

1

Möglicherweise fehlt Ihnen das Schlüsselwort Bearer.

Versuchen:

$result = $client->get('https://api.23andme.com/3/account/', [ 
    'Authorization' => 'Bearer '.$user->dna_token 
]); 

return $result; 

ich dies aus dem cURL Beispiel in 23andMe Dokumentation Folgern I here sehen.

curl "https://api.23andme.com/3/account/" \ -H "Authorization: Bearer demo_oauth_token"

+0

Ja, das durch ihre Unterstützung vorgeschlagen wurde jedoch nach wie vor mir es gibt einen 401 –

+0

Es ist etwas schief gehen bekam ist, um mit der Zugriffstoken, die Sie erhalten, dann. Ich habe gerade diesen cURL-Befehl ausgeführt und eine Demo-Antwort zurückbekommen, die mir sagt, dass es keine anderen fehlenden Header zu beachten gibt. Nur um gründlich zu sein ... versuch den cURL call an deinen guzzle code anzupassen und die Antwort zu analysieren * es * gibt zurück. –

+0

Ich habe gerade einen neuen Authentifizierungs-Token generiert und erneut versucht zu sehen, ob er abgelaufen ist, aber es gibt mir immer noch diesen Fehler. Könnte es sein, dass das Token etwas anderes als eine Zeichenfolge sein soll? –

0

Ok fand ich das Problem. Um einen Träger Token mit guzzle zu setzen haben Sie es in einem Header passieren etwa so:

$result = $client->request('GET', 'https://api.23andme.com/3/account/', [ 
      'headers' => [ 
      'Authorization' => 'Bearer ' . $user->dna_token 
      ] 
     ]); 
Verwandte Themen