2011-07-25 5 views
2

私はOAuthを使用してGoogle Webサービス(gmail)に接続するためにZend Frameworkを使用しています。次のコードは大丈夫です。拒否されたアクセスは検出できません。ユーザが「拒否」にヒットする場合たとえば、私ははというエラーを取得します「トークンのURLから有効なトークンの応答を取得できませんでした:リクエストトークンが無効です」Zend Framework経由のGoogle OAuth - 拒否アクセスの検出

ここでは、コードです:

$THREE_LEGGED_CONSUMER_KEY = 'mydomain.com'; 
    $THREE_LEGGED_SIGNATURE_METHOD = 'HMAC-SHA1'; 
    $THREE_LEGGED_CONSUMER_SECRET_HMAC = 'mySecret'; 
    $THREE_LEGGED_SCOPES = array('https://mail.google.com/'); 

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

    $options['signatureMethod'] = 'HMAC-SHA1'; 
    $options['consumerSecret'] = $THREE_LEGGED_CONSUMER_SECRET_HMAC; 

    $consumer = new Zend_Oauth_Consumer($options); 

    $conf = new Zend_Config_Ini('../application/configs/application.ini', 'production'); 
    $db = Zend_Db::factory($conf->database); 
    $sql = 'SELECT * FROM gmail_oauth WHERE id=123 LIMIT 1'; 
    $accessToken = $db->fetchRow($sql); 

    if ($accessToken['GoogleAccessToken']=='') { 
     if (!isset($_SESSION['REQUEST_TOKEN'])) { 
      $_SESSION['REQUEST_TOKEN'] = serialize($consumer->getRequestToken(array('scope' => implode(' ', $THREE_LEGGED_SCOPES)))); 
      $consumer->redirect(array('hd' => 'default')); 
     } 
     else { 
      $accessToken = serialize($consumer->getAccessToken($_GET, unserialize($_SESSION['REQUEST_TOKEN']))); 
      $data = array('GoogleAccessToken'=>$accessToken); 
      $db->update('gmail_oauth',$data,'id=123'); 
      unset($_SESSION['REQUEST_TOKEN']); 
     } 
    } 

    $db->closeConnection(); 
    return; 

ユーザーが「拒否」打ったときに例外を投げるコードの行は、私がアクセスを拒否された検出するにはどうすればよい

$accessToken = serialize($consumer->getAccessToken($_GET, unserialize($_SESSION['REQUEST_TOKEN']))); 

あります?

答えて

0

再び自分の質問に答える...

参照:http://www.phpriot.com/articles/twitter-authentication-zend-oauth/5

引用:

次我々はアクセストークンを取得するためにZend_Oauth_Consumerクラスを使用します。これを行うには、getAccessToken()メソッドを使用します。このメソッドは、有効なアクセストークンを取得できない場合に例外をスローします。そのため、このブロック全体を「try catch」にラップします。

関連する問題