好像有点奇怪。
我将 CodeIgniter 与 Elliot Haughin's Twitter library 一起使用.顺便说一下,这是一个出色的 API。
但是,我在配置文件夹的“autoload.php”中自动加载这个库,我注意到这个库捕获了任何具有“oauth_token”URL 参数的 URL。
例如,当我输入
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;
...
...
解决此问题的最佳方法是什么?
最佳答案
如果您不检查有效的 oauth_token,为什么在查询字符串中包含 oauth_token? 我假设在某些时候您想声明已设置 oauth_token 并且您只是使用 oauth_token=1 作为参数?
该库设置为始终针对 oauth_token 进行测试,如果您要自动加载它,则以任何其他方式进行测试并不是真正可行的调整。您需要一个运行它的 Controller (可能还有方法)的白名单/黑名单,这几乎违背了自动加载的目的。
如果真的需要使用 oauth_token=1,您可以将其更改为
if ( isset($_GET['oauth_token']) && $_GET['oauth_token']!==1)
如果您为 oauth_token 使用了多个值(或者如果您担心您可以通过将 oauth_token=X 附加到 URL 来触发错误),您可以尝试使用正则表达式,假设所有 oauth_token 都遵循一种模式(32 个字符长等)。
或者,您也可以根据 $token = $this->_getAccessToken() 中返回的内容,退出/返回 false。取决于代码中其他地方发生的情况。看起来返回 false 应该就可以了。
关于php - CodeIgniter Twitter API (Elliot Haughin's) 捕获任何 URL 获取其中包含 "oauth_token"的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7372560/