2011-09-10 47 views
3

似乎有点奇怪。CodeIgniter Twitter API(Elliot Haughin's)捕获任何URL获取带有“oauth_token”参数的参数

我使用CodeIgniter和Elliot Haughin's Twitter library。顺便说一句,这是一个非常好的API。

但是,我自动加载该库在“autoload.php”中的config文件夹,我注意到任何具有“oauth_token”URL参数的URL都被这个库捕获。

例如,当I型

http://localhost/myapp/index.php/controller?oauth_token=1 

然后,它引发了一个错误

A PHP Error was encountered 
Severity: Notice 
Message: Trying to get property of non-object 
Filename: libraries/Tweet.php 
Line Number: 205 

我通过库去,结果发现下面的构造调用该检查GET参数的方法。

class tweetOauth extends tweetConnection { 

    function __construct() 
    { 
    parent::__construct(); 
    .. 
    .. 
    .. 
    $this->_checkLogin(); 
    } 

和方法 “_checkLogin()” 执行以下操作

private function _checkLogin() 
{ 
    if (isset($_GET['oauth_token'])) 
    { 
    $this->_setAccessKey($_GET['oauth_token']); 
    $token = $this->_getAccessToken(); 
    $token = $token->_result; 
    ... 
    ... 

什么是解决这一问题的最好方法是什么?

+1

你必须自动加载它吗?你不能只是加载它在你的twitter控制器/方法? – bradley

+1

我想我不需要。我试图不自动加载,并且它工作正常。但我的问题是如何调整这个插件,以便它不捕获所有“$ _GET ['oauth_token']”参数。 – ericbae

回答

0

为什么你在查询字符串中有oauth_token,如果你没有检查一个有效的oauth_token? 我假设在某个时候你想声明已经设置了oauth_token,并且你只是使用oauth_token = 1作为参数?

库设置为始终对oauth_token进行测试,如果您自动加载它,那么以任何其他方式进行测试并不是一个可行的调整。你需要一个白名单/黑名单的控制器(也许是方法),它几乎可以解决自动加载的问题。

如果确实需要使用的oauth_token = 1,你可以只,如果你是使用的oauth_token多个值更改为

if (isset($_GET['oauth_token']) && $_GET['oauth_token']!==1) 

(或者,如果你担心的是,你可以通过附加引发错误oauth_token = X到一个URL),你可以尝试使用正则表达式,假设所有的oauth_tokens遵循一个模式(32个字符长等)。

另外,你也可能只是退出/返回false,取决于$ token = $ this - > _ getAccessToken()中返回的内容。取决于代码中其他地方发生的情况。看起来像返回假应该只是工作。

+0

@apermantus,oauth_token = 1只是我放在那里的一个样本值,就像我给出的任何oauth_token值,这个插件捕获它。导致问题的原因是因为我正在使用另一个使用oauth连接到另一个API的库。 – ericbae

+1

正确;在这种情况下,根据您的需要,最简单的做法是a)仅手动包含此库或b)使用if($ this-> router-> class!=“other_api”)排除某些控制器/方法类tweetOauth取决于什么是最有意义的。 – Apemantus