2017-03-16 82 views
0

我试图将我的php应用程序中的用户连接到23和我api但试图使用提供的令牌时有问题。我能顺利拿到令牌下面的HTTP动作:23和我的API与咕噜401无效的令牌

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

会被重定向到下面的控制器,并成功返回,我存储在用户表上作记号

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

} 

是问题,当我尝试使用该标记来访问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; 

我从23andMe的文档中我看到here卷曲例子推断这一点。

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

+0

是的,这是由他们的支持,建议然而,它仍然给了我401 –

+0

一定有什么东西与脚麻访问令牌,然后。我刚刚执行了该cURL命令,并获得了一个演示响应,它告诉我没有任何其他缺失头文件需要考虑。只是要彻底......尝试将演示cURL调用转换为您的guzzle代码,并分析响应* it *返回的结果。 –

+0

我刚刚生成了一个新的身份验证令牌,并再次尝试查看它是否已过期,但它仍然给我提供了该错误。难道说令牌应该是字符串以外的东西吗? –

0

好吧,我发现这个问题。为了设置一个承载令牌狂饮你必须给它传递一个头,像这样:

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