2011-01-05 110 views
10

我正在构建一个使用FB连接的Web应用程序(PHP)。我通过facebook提供的PHP lib的帮助成功注册/登录用户。我也可以张贴到墙上,使用此代码我可以存储Facebook访问令牌并在以后使用它吗?

 Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYPEER] = false; 
    Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYHOST] = 2;    
    $facebook = new Facebook(array(
     'appId' => $fb_key, 
     'secret' => $fb_secret, 
     'cookie' => true, // enable optional cookie support 
    )); 
    $session = $facebook->getSession(); 
    if ($session) 
    { 
     $facebook->api('/me/feed', 'POST', array('message'=>$message, 'link'=>$link['href'], 'name'=>$link['text']));     
    } 

但是,如果我手动去我的浏览器的cookie管理器和删除存储FB会话cookie的,代码不起作用。我唯一拥有的是我用DB存储的用户FB ID。即使FB会话丢失,是否有任何方法可以发布到用户的墙上?将用户的FB访问令牌存储在数据库中以便稍后发布到墙上或访问令牌相对较短是否有意义?

这里是我的应用程序可能发生的示例情形: 用户点击FB按钮,授权我的应用程序,被重定向回我的网站,我基于由FB提供的数据自动创建一个帐户,我也存储用户的FB ID以便我可以稍后登录该用户。现在他浏览网站,输入一些信息,并将此信息发布到他的墙上。目前一切都很好,因为用户的浏览器持有由FB创建的cookie。现在用户离开该网站并联系网站管理员。管理员打开他自己的浏览器,进入管理界面并代表该用户发布内容。现在,拥有该用户的FB ID并假定该用户没有撤​​销权限,我仍可以将此内容发布到他的墙上吗?

回答

8

UPDATE:此答案不再有效,因为offline_access已弃用。

您需要请求offline_access权限。检查permissions文档。

编辑根据更新和评论 - 有关删除offline_access的一些信息可以找到here

+0

谢谢,效果很好! – Eugene 2011-01-05 20:40:31

+4

这将被弃用。尝试使用60天的access_token。 – funerr 2012-06-13 19:37:34

23

使用Facebook PHP SDK v3(see on github),询问和使用用户离线访问令牌非常简单。这是你如何做到的。

下载离线访问令牌

首先,你检查,如果用户登录或不:

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) { 
    $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 ?> 

然后,当用户登录时,您可以检索脱机访问令牌并将其存储。为了得到它,请致电:

if ($user) { 
    $token = $facebook->getAccessToken(); 
    // store token 
} 

使用离线访问令牌

要使用离线访问令牌时未登录的用户:

require "facebook.php"; 
$facebook = new Facebook(array(
    'appId' => YOUR_APP_ID, 
    'secret' => YOUR_APP_SECRET, 
)); 

$facebook->setAccessToken("..."); 

现在你可以进行API调用对于此用户:

$user_profile = $facebook->api('/me'); 

希望有所帮助!

+2

绝妙的回答。你应该写Facebook文档,因为它比已有的更好 – 2011-06-10 01:59:22

+0

谢谢迈克尔:) – Quentin 2011-06-10 03:18:10

+0

非常非常好的解决方案,我一直在寻找3天。 – 2012-09-16 15:56:00

相关问题