0

我在使用 OAuth for Google 时遇到了一点问题,我使用 Jim Saunder Libraire for 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) 文件名:libraries/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 获取我的令牌?

4

1 回答 1

1

老实说,我不确定 Session 将如何由 PHP 代码管理,因此对您几乎没有帮助。似乎这条线是原因

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

您正在尝试从 Google 获取 access_token 以向 Google API 发送请求以获取曾经授权您的应用程序的用户信息,我猜 Google 没有返回他们所期望的内容。这可能是由于请求数据中的类型不匹配,因为 Google Oauth 对您的期望与您实际发送的内容不匹配

在你的情况下,我会使用我的 Eclipse 的调试器来查看到底发生了什么,但是对于 OAuth,我已经在前面的问题中告诉过你

  1. 您需要存储您在第一步中获得的令牌。
  2. 一旦您的用户从验证他们自己回来后,您需要使用该请求令牌获取 access_token
  3. 获得请求令牌后,您就可以进行最终的 API 调用了,您的代码似乎无法从会话中获取数据
于 2011-12-08T09:53:37.970 回答