如何使用新的Facebook PHP SDK 3.0.0使用OFFLINE_ACCESS登录?
问题描述:
与我用这个登录有人offline_access老(2.X)SDK:如何使用新的Facebook PHP SDK 3.0.0使用OFFLINE_ACCESS登录?
$session = array
(
'uid' => $userdata['fb_uid'],
'sig' => $userdata['fb_sig'],
'access_token' => $userdata['fb_access_token']
);
$facebook->setSession($session);
在新的SDK此功能犯规存在了。我想我需要使用登录:
setPersistentData($键,$值)
不过这个功能受到保护,我不知道什么是“代码”是什么?我是否需要这个来登录用户? 'sig'怎么回事?我不需要这个了吗?
希望有人已经知道这一点,因为文档真的没有帮助!
答
使用Facebook PHP SDK v3(see on github),它非常简单。要记录具有offline_access
权限的用户,请在生成登录URL时提问。这是你如何做到的。
下载离线访问令牌
首先,你检查,如果用户登录或不:
require "facebook.php";
$facebook = new Facebook(array(
'appId' => YOUR_APP_ID,
'secret' => YOUR_APP_SECRET,
));
$user = $facebook->getUser();
if ($user) {
try {
$user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
// The access token we have is not valid
$user = null;
}
}
如果他不是,你产生了“使用Facebook登入” URL请求的offline_access
许可:
if (!$user) {
$args['scope'] = 'offline_access';
$loginUrl = $facebook->getLoginUrl($args);
}
,然后显示在你的模板的链接:
<?php if (!$user): ?>
<a href="<?php echo $loginUrl ?>">Login with Facebook</a>
<?php endif ?>
然后,您可以检索脱机访问令牌并将其存储。为了得到它,请致电:
$facebook->getAccessToken()
使用离线访问令牌
要使用离线访问令牌时未登录的用户:
require "facebook.php";
$facebook = new Facebook(array(
'appId' => YOUR_APP_ID,
'secret' => YOUR_APP_SECRET,
));
$facebook->setAccessToken("...");
现在你可以进行API调用对于此用户:
$user_profile = $facebook->api('/me');
希望有所帮助!
答
随着PHP SDK 2.0(我猜),我只是用它像
$data = $facebook->api('/me', 'GET', array('access_token' => $userdata['fb_access_token']));
这应与较新的一个工作,因为它似乎是更清洁的方式不是由我们自己而建立的会话。你能试一下吗?
答
昆汀的答案相当不错,但不完整,我想。它工作的很好,但我例如getUser()
在那时不工作,因为userId(这是getUser()
返回)被缓存。
我已经创建了一个新方法来清除所有缓存并持久保存。
public function setPersistentAccessToken($access_token) {
$this->setAccessToken($access_token);
$this->user = $this->getUserFromAccessToken();
$this->setPersistentData('user_id', $this->user);
$this->setPersistentData('access_token', $access_token);
return $this;
}
mhhh ...似乎你只需要使用$ facebook-> setAccessToken()来设置access_token,就是这样... – Martin 2011-05-25 11:46:37