我已经尝试了几天没有运气,我设法使用PHP-SDK附带的example.php并且工作得很好。我只需要存储返回的会话并在以后使用它,这样我就可以访问而无需重新进行身份验证。
我尝试将会话存储在数据库的序列化字段中,然后恢复数据,反序列化并使用php-sdk中的setSession函数来检索身份验证。不幸的是,这不起作用,
以下是使用代码示例的上一个问题的链接..
Facebook OAuth retrieve information based on stored session
请指教?
答案 0 :(得分:7)
如果您想要在用户退出应用后使用该用户的访问令牌,则必须要求offline_access
权限。
使用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) {
$user = null;
}
}
如果不是,则会生成“使用Facebook登录”网址,要求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');
希望有所帮助!