如何解决如何使用新的Facebook PHP SDK 3.0.0以OFFLINE_ACCESS登录?
| 使用旧的(2.x)SDK,我用它来记录具有offline_access的用户:$session = array
(
\'uid\' => $userdata[\'fb_uid\'],\'sig\' => $userdata[\'fb_sig\'],\'access_token\' => $userdata[\'fb_access_token\']
);
$facebook->setSession($session);
在新的SDK中,此功能不再存在。我想我需要使用以下方式登录:
setPersistentData($ key,$ value)
但是此功能受保护,我不知道“代码”是什么?我是否需要这个来登录用户? \'sig \'怎么了?我不再需要这个吗?
希望有人已经弄清楚了,因为文档确实没有帮助!
解决方法
使用Facebook PHP SDK v3(请参阅github),这非常简单。要记录具有“ 1”权限的人,请在生成登录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,));
$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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。