2010-09-09 135 views
1

我目前正在为我的项目使用PHP Facebook SDK(http://github.com/facebook/php-sdk/)。我已经设置好了,用户必须点击一个链接才能访问Facebook,Facebook会验证用户使用该应用程序,然后将会话详细信息返回到我的网站,这很好。但是,我希望将这些会话详细信息存储在数据库中,以便用户登录时可随时访问其帐户中的信息。目前,如果用户从Facebook注销,然后尝试从我的网站检索信息,我会收到以下异常“OAuthInvalidTokenException:处理访问令牌时出错”。如果用户在同一台​​PC上登录到Facebook,那么就没有问题。Facebook PHP SDK - 保持登录状态

有什么我必须设置,或者是否有其他方式我应该执行此连接能够检索数据时,用户没有登录?

我用得到的代码/设置了Facebook会话:

require 'libraries/facebook/facebook.php'; 

// Create our Application instance (replace this with your appId and secret). 
$facebook = new Facebook(array(
    'appId' => 'xxxx', 
    'secret' => 'xxxx', 
)); 

$session = $facebook->getSession(); 

$me = null; 
// Session based API call. 
if ($session) { 
    //Save to database 

    } catch (FacebookApiException $e) { 
     error_log($e); 
    } 
} else { 
    $loginUrl = $facebook->getLoginUrl(); 
    header('Location: ' . $loginUrl); 
} 

有一次我保存从这一部分数据库中的会话,我通过发布系列化会议,这显示数据库中的数据:

$session = unserialize($_POST['session']); 
    require_once('libraries/facebook/facebook.php'); 

    $facebook = new Facebook(array(
     'appId' => 'xxxx', 
     'secret' => 'xxxx', 
    )); 

    $facebook->setSession($session, false); 

    try { 
     $uid = $facebook->getUser(); 
     // Do stuff 
    } catch (FacebookApiException $e) { 
     echo "<tr><td>" . $e . "</td>"; 
    } 

这里有什么明显的错误吗?或者我是否可以不使用此方法创建oAuth连接,以便在用户未登录时向用户请求数据?

感谢,

+1

这个项目是使用Facebook Connect的第三方网站;桌面应用程序;或现场Facebook应用程序? – 2010-09-09 10:04:17

+2

这是一个网站 - 不过在实验中,我已经将应用程序的类型改为“原生应用程序”,然后它提供了“保持登录到xxx”的选项,可以打勾这是我正在寻找的! – Dan 2010-09-09 10:44:31

+0

@Dan你在哪里找到该复选框?我已经切换到“原生”,但我无法看到我的应用程序页面上的任何地方的复选框:( – Chud37 2013-02-28 09:34:00

回答

2

默认情况下,您从Facebook平台收到的访问令牌(OAuth令牌)仅为会话长度。所以,你所描述的是预期的。

如果您想要在用户注销后仍继续与API交互,您需要向他们请求offline_accessextended permission,这会让您的访问令牌“长寿”,您可以将其存储在数据库供以后使用。

请注意,如果用户修改授予您的应用的权限,您的访问令牌将变为无效(或至少不一致)。但是您可以通过Real Time Updates跟上权限更改。

注:保持用户“登录”,只是使您能够代表他们行事时,他们在不登录电源

1

我已经改变了应用程序的类型是“原生应用”而不是“HTML5 /移动网络”,然后提供选项“保持登录到XXX”可以选择,但后者似乎没有提供。已经测试过,现在看起来还在工作,这是个好消息!

-4

只需在查询的API通过以下方式获取注销url ...

$logoutUrl=$facebook->getLogoutUrl(); 

使用$ logoutUrl将用户登出!而已!