Zend Gmail Oauth:如何获取经过身份验证的用户个人资料?

时间:2012-03-31 13:42:46

标签: zend-framework oauth gmail

我正在使用Zend Gmail Oauth 1.0实现使用Gmail功能登录。 身份验证成功后,如何获取经过身份验证的用户配置文件,特别是用户的唯一Gmail身份验证?这是代码:

$THREE_LEGGED_SCOPES = array('https://mail.google.com/', 
    'https://www.google.com/m8/feeds');

$options = array(
        'requestScheme' => Zend_Oauth::REQUEST_SCHEME_HEADER,
        'version' => '1.0',
        'consumerKey' => $THREE_LEGGED_CONSUMER_KEY,
        'consumerSecret' => $THREE_LEGGED_CONSUMER_SECRET_HMAC,
        'callbackUrl' => getCurrentUrl(),
        'requestTokenUrl' => 'https://www.google.com/accounts/OAuthGetRequestToken',
        'userAuthorizationUrl' => 'https://www.google.com/accounts/OAuthAuthorizeToken',
        'accessTokenUrl' => 'https://www.google.com/accounts/OAuthGetAccessToken'
    );

    if ($THREE_LEGGED_SIGNATURE_METHOD == 'RSA-SHA1') {
        $options['signatureMethod'] = 'RSA-SHA1';
        $options['consumerSecret'] = new Zend_Crypt_Rsa_Key_Private(
            file_get_contents(realpath($THREE_LEGGED_RSA_PRIVATE_KEY)));
    } else {
        $options['signatureMethod'] = 'HMAC-SHA1';
        $options['consumerSecret'] = $THREE_LEGGED_CONSUMER_SECRET_HMAC;
    }

    $consumer = new Zend_Oauth_Consumer($options);

    /**
     * When using HMAC-SHA1, you need to persist the request token in some way.
     * This is because you'll need the request token's token secret when upgrading
     * to an access token later on. The example below saves the token object 
     * as a session variable.
     */
    if (!isset($_SESSION['ACCESS_TOKEN'])) {
      if (!isset($_SESSION['REQUEST_TOKEN'])) {
        // Get Request Token and redirect to Google
        $_SESSION['REQUEST_TOKEN'] = serialize($consumer->getRequestToken(array('scope' => implode(' ', $THREE_LEGGED_SCOPES))));
        $consumer->redirect();
      } else {
        // Have Request Token already, Get Access Token
        $_SESSION['ACCESS_TOKEN'] = serialize($consumer->getAccessToken($_GET, unserialize($_SESSION['REQUEST_TOKEN'])));
        header('Location: ' . getCurrentUrl(false));
        exit;
      } 
    } else {
      // Retrieve mail using Access Token
      $accessToken = unserialize($_SESSION['ACCESS_TOKEN']); 
   }

1 个答案:

答案 0 :(得分:0)

靠近我可以告诉你不能。
Gmail没有api只是只读feed 但是,如果您想要该Feed,则范围网址为:

https://mail.google.com/mail/feed/atom/

Google Apps的上下文中使用gmail帐户有一些api。