Google Oauth для YouTube: почему я получаю "Неопределенный индекс: oauth_token" (код Джима С.) - PullRequest
0 голосов
/ 08 декабря 2011

У меня небольшая проблема с OAuth для Google, я использую Jim Saunder Libraire для CodeIgniter (http://codeigniter.com/wiki/OAuth_for_Google), но когда я пришел к своей функции access_youtube, которая выглядит так:

public function access_youtube()
{ //STEP 2

// Here is the first call to load the library 
    $params['key'] = 's390075769.onlinehome.fr';
    $params['secret'] = 'iHD72YKzWmbm8VTwncht_E-d';

// We  can change the signing algorithm and http method by setting the following in your params array.
    $params['algorithm'] = 'HMAC-SHA1';
    // $params['method'] = "GET";

// We need to reload the library since we left our site beetween Step 1 & 2.
    $this->load->library('google_oauth', $params);

// We are using HMAC signing you need to specify the token_secret you got from the request step as the second parameter of this method. So
    $token_secret = $this->session->userdata('token_secret');
    $oauth = $this->google_oauth->get_access_token(false, $token_secret);

// The access method will return an array with keys of ‘oauth_token’, and ‘oauth_token_secret’ 
// These values are your access token and your access token secret. We should store these in our database.  
    $this->session->set_userdata('oauth_token', $oauth['oauth_token']);
    $this->session->set_userdata('oauth_token_secret', $oauth['oauth_token_secret']);

// Now you have an access token and can make google service requests on your users behalf
    redirect(site_url());
}

Я получил несколько сообщений об ошибках:

неопределенный индекс: oauth_token

Неопределенный индекс: oauth_token_secret

, которые ссылаются на строки $ this-> session-> set_userdata ...

и после каждого сообщения об ошибке я получаю:

Сообщение: невозможно изменить информацию заголовка - заголовки уже отправлены (вывод начался с /homepages/7/d390075755/htdocs/system/core/Exceptions.php:170) Имя файла: библиотеки / Session.php Номер строки: 671

, который, я думаю, связан с предыдущим сообщением об ошибке.

поэтому я попробовал это в конструкторе:

class Example extends CI_Controller
{
private $CI;
public function __construct()
{
     parent::__construct();

    $this->CI =& get_instance();
    $this->CI->load->library('session');

    $oauth = array();
    $oauth['oauth_token_secret']='';
    $oauth['oauth_token']='';

}

как раз перед моей функцией, но она ничего не делает ... и я боюсь, что потеряю свои переменные сеанса с помощью Google ... не так ли? Получу ли я свои токены от Google?

1 Ответ

1 голос
/ 08 декабря 2011

Честно говоря, я не уверен, как Session будет управляться кодом PHP, поэтому он мало чем вам поможет.Кажется, что эта строка является причиной

$oauth = $this->google_oauth->get_access_token(false, $token_secret);

, которую вы пытаетесь получить access_token от Google, чтобы отправить запрос в API Google, чтобы получить информацию о пользователях, которые когда-либо авторизуют ваше приложение, и я думаю, что Google не возвращает то, что имеетожидалось от них.это может быть связано с несоответствием типов в данных запроса, как с тем, что Google Oauth ожидает от вас и с тем, что вы на самом деле отправляете

В вашем случае я бы использовал отладчик моего Eclipse, чтобы увидеть, что именно происходит, нодля OAuth я уже говорил вам в предыдущем вопросе

  1. Вам нужно сохранить этот токен, который вы получаете на первом шаге.
  2. Как только ваш пользователь сам вернется с аутентификации, вам нужнополучить access_token, используя этот токен запроса
  3. Когда у вас есть токен запроса, вы готовы сделать окончательный вызов API, и кажется, что ваш код не может получить данные из сеанса
...