我目前正在为我的项目使用PHP Facebook SDK(http://github.com/facebook/php-sdk/)。我已经设置好了,以便用户必须单击链接访问Facebook,然后验证用户是否使用该应用程序,然后将会话详细信息返回到我的网站,这很好。但是,我希望将这些会话详细信息存储在数据库中,以便用户登录时可以随时访问其帐户中的信息。目前,如果用户退出Facebook,然后尝试从我的网站检索信息,我会收到以下异常“OAuthInvalidTokenException:处理访问令牌时出错”。如果用户在同一台PC上登录Facebook,则没有问题。
我有什么必须设置,还是有其他方式我应该执行此连接以便能够在用户未登录时检索数据?
我用来获取/设置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连接,以便在用户未登录时为其请求数据?
谢谢,
丹
答案 0 :(得分:2)
默认情况下,您从Facebook平台收到的访问令牌(OAuth令牌)仅限会话长度。所以,你所描述的是预期的。
如果您想要在用户注销后继续与API进行互动,则需要向他们请求offline_access
extended permission,这样才能让您的访问权限“长寿” ,您可以将其存储在数据库中供以后使用。
请注意,如果用户修改了授予您应用的权限,您的访问令牌将变为无效(或者至少是不一致的)。但您可以通过Real Time Updates跟进权限更改。
注意:此不让用户“登录”,只是让您有权代表他们不登录。
答案 1 :(得分:1)
我已将应用程序的类型更改为“本机应用程序”而不是“HTML5 / Mobile Web”,然后提供“保持登录到xxx”的选项,可以选择,这似乎不是由后者提供。已经测试了它,它现在似乎正在工作,这是个好消息!
答案 2 :(得分:0)
如果您需要从API获取用户数据,您可以获取应用程序access_token并获取您的应用用户数据,并使用应用程序access_token对您的查询进行签名。 查看App登录部分http://developers.facebook.com/docs/authentication/
答案 3 :(得分:-4)
只需按以下方式查询API即可获取注销网址...
$logoutUrl=$facebook->getLogoutUrl();
使用$ logoutUrl将用户注销掉!多数民众赞成!