我正在使用cakePHP 2.x.目前关于twitter OAuth,http://code.42dh.com/oauth/。
function twitter_authentication()
{
//assume above coding is all correct.
$this->Session->write('twitter_request_token', ($requestToken));
$this->redirect('http://api.twitter.com/oauth/authenticate?force_login=true&oauth_token='.$requestToken->key); //I able to get $requestToken.
}
function twitter_login()
{
$requestToken = $this->Session->read('twitter_request_token');
$accessToken = $this->OAuthConsumer->getAccessToken('Twitter','https://api.twitter.com/oauth/access_token', $requestToken);
在function_login()中,我无法读取会话并最终获得PhP Incomplete Class。如果我$this->Session->write('twitter_request_token', serialize($requestToken));
和$requestToken = $this->Session->read(unserialize('twitter_request_token');
它会起作用,但我会在其他地方因使用序列化和反序列化会话而导致错误。
答案 0 :(得分:2)
“PHP Incomplete Class”表示PHP没有您要加载的对象的类定义。
选项A:在将对象写入会话时确定该对象是什么类,并确保在加载对象之前加载类的定义。
选项B:在写入之前将对象转换为stdClass
或数组,并在加载后转换回来。这可能比第一个选项更复杂。
答案 1 :(得分:0)
OAuth.php的OauthToken类非常简单,只有两个属性:key和secret。获取登录URL后,可以将其作为数组存储到会话中:
CakeSession::write('Twitter.requestToken', array(
'key' => $requestToken->key,
'secret' => $requestToken->secret
));
然后,在调用OAuthClient-> getAccessToken()时实例化您自己的OAuthToken:
$sessionRequestToken = CakeSession::read('Twitter.requestToken');
$accessToken = $twitterClient->getAccessToken('https://api.twitter.com/oauth/access_token',
new OAuthToken($sessionRequestToken['key'], $sessionRequestToken['secret']));
应该准备好了:
if ($accessToken) {
$twitterClient->post($accessToken->key, $accessToken->secret,
'https://api.twitter.com/1/statuses/update.json', array('status' => 'My balls smells like A-1 sauce. #science'));
}