[Hybridauth] добавление провайдера battle.net
Всем привет!
Пытаюсь добавить нового провайдера в Hybridauth, но что-то не получается.
Создал в каталоге core/components/hybridauth/model/hybridauth/lib/Providers/ файл BattleNet.php с таким содержимым.
Теперь при попытке привязать учетку, в этом методе, в переменной response получаю ошибку:
Пытаюсь добавить нового провайдера в Hybridauth, но что-то не получается.
Создал в каталоге core/components/hybridauth/model/hybridauth/lib/Providers/ файл BattleNet.php с таким содержимым.
<?php
class Hybrid_Providers_BattleNet extends Hybrid_Provider_Model_OAuth2
{
// default permissions
public $scope = "wow.profile";
public $state = "";
function initialize()
{
parent::initialize();
// Provider api end-points
$this->api->authorize_url = "https://eu.battle.net/oauth/authorize";
$this->api->token_url = "https://eu.battle.net/oauth/token";
$this->state = bin2hex(openssl_random_pseudo_bytes(16));
if (!empty($this->config['fields']))
$this->fields = $this->config['fields'];
}
function loginBegin()
{
Hybrid_Auth::redirect( $this->api->authorizeUrl( array( "scope" => $this->scope, "state" => $this->state ) ) );
}
}
На dev.battle.net создал приложение, где получил client_id и client_secret, добавил в системные настройки нового провайдера.Теперь при попытке привязать учетку, в этом методе, в переменной response получаю ошибку:
{"error":"unauthorized","error_description":"An Authentication object was not found in the SecurityContext"}
Не могу понять почему не удается получить access token. Прошу помощи, может кто сталкивался с подобным или может уже подключал battle.net =)
Поблагодарить автора
Отправить деньги
Комментарии: 2
Судя по всему дело в этом
а battle.net принимает client_secret и client_id из заголовков запроса
github.com/bezumkin/modx-hybridauth/blob/master/core/components/hybridauth/model/hybridauth/lib/thirdparty/OAuth/OAuth2Client.php#L211
По идее надо сделать так в BattleNet.php:
To request access tokens, you need to provide the following POST parameters to the token URI, using your client ID and secret with HTTP Basic Authorizationнужно передать авторизацию в заголовках
а battle.net принимает client_secret и client_id из заголовков запроса
curl_setopt($ch,CURLOPT_HTTPHEADER,'Authorization: Basic ' . base64_encode($this->client_id . ':' . $this->client_secret);
github.com/bezumkin/modx-hybridauth/blob/master/core/components/hybridauth/model/hybridauth/lib/thirdparty/OAuth/OAuth2Client.php#L34github.com/bezumkin/modx-hybridauth/blob/master/core/components/hybridauth/model/hybridauth/lib/thirdparty/OAuth/OAuth2Client.php#L211
По идее надо сделать так в BattleNet.php:
function initialize()
{
parent::initialize();
// Provider api end-points
$this->api->authorize_url = "https://eu.battle.net/oauth/authorize";
$this->api->token_url = "https://eu.battle.net/oauth/token";
$this->api->curl_header = array('Authorization: Basic ' . base64_encode($this->client_id . ':' . $this->client_secret);
$this->state = bin2hex(openssl_random_pseudo_bytes(16));
if (!empty($this->config['fields']))
$this->fields = $this->config['fields'];
}
Большое спасибо за помощь! Токен получен!
Буду дальше разбираться.
Это добавил в initialize():
Буду дальше разбираться.
Это добавил в initialize():
$this->api->curl_header = array('Authorization: Basic ' . base64_encode($this->api->client_id . ':' . $this->api->client_secret));
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.