Yii2 - 如何编写OAuth客户端

时间:2016-08-22 20:30:51

标签: oauth-2.0 yii2 fitbit

我正在尝试将FitBit OAuth添加到我的Yii2应用程序中。我已成功设法设置其他API,例如Google和Facebook - 但这些API正在使用yii\authclient\clients。在这里,我试图使用yii\authclient\OAuth2编写自己的。这是我的代码:

<?php
namespace app\auth\clients;

class Fitbit extends \yii\authclient\OAuth2{

  public $authUrl = 'https://www.fitbit.com/oauth2/authorize';
  public $tokenUrl = 'https://api.fitbit.com/oauth2/token';
  public $apiBaseUrl = 'https://api.fitbit.com';
  public $scope = 'profile';

  protected function initUserAttributes(){
      return $this->api('/1/user', 'GET');
  }

  protected function defaultName(){
      return 'fitbit';
  }

  protected function defaultTitle(){
      return 'Fitbit';
  }
}

这是我的配置:

'authClientCollection' => [
    'class' => 'yii\authclient\Collection',
    'clients' => [
        'google' => [
            'class' => 'yii\authclient\clients\Google',
            'clientId' => 'ID',
            'clientSecret' => 'SECRET',
        ],
        'fitbit' => [
            'class' => 'app\auth\clients\Fitbit',
            'clientId' => 'ID',
            'clientSecret' => 'SECRET',
        ],

但我很难过,因为这是我得到的错误:

{"errors":[{
    "errorType":"invalid_request",
    "message":"Authorization header required. Visit https://dev.fitbit.com/docs/oauth2 for more information on the Fitbit Web API authorization process."
}],
"success":false}

任何帮助都会非常感激。谢谢。

编辑我目前的想法是:

return $this->api('/1/user', 'GET', [], [
  'WWW-Authenticate' => 'Authorization: Basic ' . base64_encode($this->client_id . ':' . $this->client_secret),
]);

但这仍然给我同样的错误。

0 个答案:

没有答案