2017-03-16 8 views
0

私のPHPアプリケーションのユーザーを23とMe apiに接続しようとしていますが、提供されたトークンを使用しようとすると問題が発生します。ときに私の問題がある23とMe Guzzle 401付き無効なトークン

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'); 

} 

次のコントローラにリダイレクトされ、正常に私は、ユーザーテーブルに格納トークンを返し

<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> 

:私は正常に次のHTTPアクションでトークンを取得することができますそのトークンを使って23と私のAPIにアクセスしてみてください。私はその呼び出しを構造化する方法がわからないので、疑問に思っています。次の複数のバリエーションを試しました。

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

return $result; 

更新:問題は私がグーグルをフォーマットしているようだ。私がカールしたとき:

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

APIはテスト結果を返します。どのように上記のGuzzleをフォーマットしますか?

答えて

1

Bearerというキーワードがありません。

試してみてください。

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

return $result; 

私はhereを参照してください23andmeのマニュアルでcURLの例からこれを推測しています。

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

+0

はいしかし、それはまだ私と間違って何かをすることがあるはずだ401 –

+0

を与えていますあなたが受け取っているアクセストークン。私はちょうどそのcURLコマンドを実行し、デモの返信を返しました。これは、他に見逃されているヘッダーがないことを示しています。ちょうど徹底的に...デモcURLコールをあなたのグーズコードに適応させ、それが返す応答を分析してみてください。 –

+0

私はちょうど新しい認証トークンを生成し、それが期限切れであったかどうかを再度試しましたが、それでも私にそのエラーを与えています。トークンが文字列以外のものになっている可能性がありますか? –

0

[OK]を私はこの問題を発見しました。がつがつ食うとベアラトークンを設定するためには、そのようにヘッダにそれを渡すことがあります。これは彼らのサポートによって提案された

$result = $client->request('GET', 'https://api.23andme.com/3/account/', [ 
      'headers' => [ 
      'Authorization' => 'Bearer ' . $user->dna_token 
      ] 
     ]); 
関連する問題