【问题标题】:Difficulty requesting the Access Token With OAuth? Error: No token or token_secret使用 OAuth 请求访问令牌有困难吗?错误:没有令牌或 token_secret
【发布时间】:2011-02-03 19:40:46
【问题描述】:

我希望有人能够回答。我已经为此工作了好几个小时,但找不到解决方案。我还一遍又一遍地研究了 HTTP_OAUTH documentation 以及一些教程。我坚持使用它,因为我的主机不支持正常的 OAuth。除此之外,还不错。这是我到目前为止所拥有的。我能够:

  1. 获取访问令牌 (URL_PATH_GOES_HERE?oauth_token=XXXXXXXXXXXXX)
  2. 重定向用户以获得他们的权限
  3. 使用访问令牌和 oauth_verifier 重定向回我的回调 URL(URL_PATH_GOES_HERE?oauth_token=XXXXXXXXXXXXX?oauth_verifier=XXXXXXXXXX)

但是,当我到达那里时,我在请求访问令牌时遇到了困难,因此我可以从那里代表用户提出请求。

我不断收到错误:

没有令牌或令牌_secret

有什么想法吗?我将永远感激不尽!!

##############################
## FILNENAME: msconfig.php ###
##############################

<?php
    define('OAUTH_CONSUMER_KEY',CONSUMER KEY GOES HERE);
    define('OAUTH_CONSUMER_SECRET',CONSUMER SECRET GOES HERE);
    define('OAUTH_REQUEST_TOKEN_API', 'http://gomiso.com/oauth/request_token');
    define('OAUTH_AUTHORIZE_API', 'http://gomiso.com/oauth/authorize'); 
    define('OAUTH_ACCESS_TOKEN_API', 'http://gomiso.com/oauth/access_token');
    define('CALLBACK_URL', 'URL_PATH_GOES_HERE/callback.php');
    define('MISO_USER_AGENT', 'youruseragent');
?>

###############################
### FILNENAME: index.php ######
###############################

<?php

    //##########################################################################
    // START A SESSION SO WE CAN SHARE VARIABLES WITH OUR CALLBACK HANDLER #####
    //##########################################################################
    session_start();

    //############################
    // IMPORT CONFIGURATION FLE ##
    //############################
    require_once("misoconfig.php");

    //##########################    
    //#IMPORT EXTERNAL CLASSES #
    //##########################
    require_once("HTTP/OAuth/Consumer.php");

    //########################
    //# FETCH REQUEST TOKEN ##
    //########################
    try { 
        $consumer = new HTTP_OAuth_Consumer(OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET);
        $consumer->getRequestToken(OAUTH_REQUEST_TOKEN_API,CALLBACK_URL);
        $_SESSION['request_token'] = $consumer->getToken();
    }catch (Exception $e) {     
        echo 'Fetching Request Token Exception: ',  $e->getMessage(), "\n"; 
    } 

    //#############################################     
    // REDIRECT THE USER TO THE AUTHORIZATION URL #
    //#############################################
    try { 
        $url = $consumer->getAuthorizeUrl(OAUTH_AUTHORIZE_API);
        header("Location: $url");
    }catch (Exception $e) {     
        echo 'Authorization URL Redirection Exception: ',  $e->getMessage(), "\n"; 
    } 

?>

##############################
## FILNENAME: callback.php ###
##############################

<?php

    // START A SESSION SO WE CAN ACCESS VARIABLES SHARED WITH US BY INDEX.PHP 
    session_start();

    // IMPORT CONFIGURATION FLE 
    require_once("misoconfig.php");

    // IMPORT EXTERNAL CLASSES
    require_once("HTTP/OAuth/Consumer.php");

     // Store these tokens (at least for now)
        $_SESSION['oauth_verifier']   = $_GET['oauth_verifier'];

    // BY REACHING THIS FAR, WE'VE BEEN AUTHENTICATED. LET'S GRAB THE ACCESS TOKEN AND SECRET AND SAVE THEM <SOMEWHRE>. 
    try { 
        $consumer = new HTTP_OAuth_Consumer($_SESSION['request_token'], $_SESSION['oauth_verifier']);
        $consumer->getAccessToken(OAUTH_ACCESS_TOKEN_API,$_SESSION['oauth_verifier'],array(),'GET');
    }catch (Exception $e) { 
        echo 'Access Token Exception: ',  $e->getMessage(), "\n"; 
    } 

?>

【问题讨论】:

  • 我冒昧地编辑了你的标题,因为 on 提议不是很能描述问题而且太笼统,请随意以任何你喜欢的方式改进我的版本,但我建议标题为尽可能具体。
  • @Trufa:非常感谢!实际上看起来好多了!
  • 没问题,虽然不知道你的问题,但祝你好运!
  • 哈哈,真烦人。 OAuth 基本上有三个步骤,我在最后一个步骤,我无法让它工作!啊!!

标签: php oauth


【解决方案1】:

在您的 index.php 文件中:

$_SESSION['request_token']        = $consumer->getToken();
$_SESSION['request_token_secret'] = $consumer->getTokenSecret();

在 callback.php 文件中:

$consumer = new HTTP_OAuth_Consumer(OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET, $_SESSION['request_token'], $_SESSION['request_token_secret']);
$consumer->getAccessToken(OAUTH_ACCESS_TOKEN_API,$_SESSION['oauth_verifier'],array(),'GET');
# and save the new tokens after
$_SESSION['request_token']        = $consumer->getToken();
$_SESSION['request_token_secret'] = $consumer->getTokenSecret();

【讨论】:

  • 不走运!我仍然得到401'd。我保持 index.php 不变(我认为这就是你想要我做的),我签署了我的消费者现在看起来像这样: $consumer = new HTTP_OAuth_Consumer($_SESSION['request_token'], $_SESSION['request_token_secret']) ;我正在尝试捕捉,每次它吐出的错误是:没有令牌或令牌_secret
  • 你必须修改 index.php,设置 $_SESSION['request_token_secret']
  • @paul-calabro 我在实例化消费者对象时忘记设置消费者键,我的错。我对其进行了编辑以包含它。
【解决方案2】:

我只是稍微更改了 callback.php 文件以匹配示例,现在它似乎可以工作了。如果它对你有用,请告诉我,但对我来说,我会得到正确的回复。

<?php

// START A SESSION SO WE CAN ACCESS VARIABLES SHARED WITH US BY INDEX.PHP
session_start();

// IMPORT CONFIGURATION FLE
require_once("misoconfig.php");

// IMPORT EXTERNAL CLASSES
require_once("HTTP/OAuth/Consumer.php");

 // Store these tokens (at least for now)
    $_SESSION['oauth_verifier']   = $_GET['oauth_verifier'];

try {
    // !!!CHANGED ARGUMENTS TO MATCH EXAMPLE
    $consumer = new HTTP_OAuth_Consumer(OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET, $_SESSION['request_token'], $_SESSION['oauth_verifier']);
    $consumer->getAccessToken(OAUTH_ACCESS_TOKEN_API, $_SESSION['oauth_verifier'],array(),'POST');
}catch (Exception $e) {
    echo 'Access Token Exception: ',  $e->getMessage(), "\n";
}

?>

顺便说一句,我知道这需要做很多工作,但是您能否在示例工作后为该示例创建一个 github 存储库。我希望能够链接到该示例以供其他用户将来参考。如果不是那也没关系。

【讨论】:

    猜你喜欢
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 2012-11-06
    相关资源
    最近更新 更多