我有一个存储用户的访问令牌(以及其他一些数据)的数据库。当我授权用户时,我的权限列表包括offline_access。存储用户的Facebook访问令牌
那么用户的访问令牌(客户端)总是应该与数据库中该用户的访问令牌相同吗?或者用户的访问令牌在注销时是否改变,更改密码等?
我有一个存储用户的访问令牌(以及其他一些数据)的数据库。当我授权用户时,我的权限列表包括offline_access。存储用户的Facebook访问令牌
那么用户的访问令牌(客户端)总是应该与数据库中该用户的访问令牌相同吗?或者用户的访问令牌在注销时是否改变,更改密码等?
不,即使使用offline_access,访问令牌也不总是相同的。在1)用户更改其密码或2)停用您的应用程序时,您需要获取新的访问令牌。否则,它应该保持不变。
用户Facebook的ID将永远不会改变。这可以从访问令牌解析或通过调用/ me图形api获得。
Facebook有一个blog post,详细介绍了这一点。
更新:Facebook专门为handling revoked authorization添加了博文。
在我的数据库中,我存储了与访问令牌相关的高分。由于该访问令牌可以过期并且不与数据库的访问令牌相同,所以用户的高分将被“擦除”。你有什么想法来解决这个问题吗? – 2011-06-01 21:30:31
简单 - 只需存储它与他们的Facebook用户ID - 这将永远不会改变。 – bkaid 2011-06-01 21:31:23
我完全忘记了用户有一个用户ID。那么将用户的访问令牌存储在数据库中会有什么意义吗? – 2011-06-01 21:40:59
并非总是如此。
访问令牌通常会在某个时间点后过期。有一种方法可以使访问令牌具有无限的过期时间,但您需要请求offline_access
作为其中一个权限。
查看here了解更多信息。
编辑刚才看到您需要offline_access作为权限。然后不,它们不会过期
<?php
# We require the library
require("facebook.php");
require("db.php");
# Creating the facebook object
$facebook = new Facebook(array(
'appId' => 'APP_ID',
'secret' => 'APP_SECRET_ID',
'cookie' => true
));
# Let's see if we have an active session
$session = $facebook->getSession();
if(!empty($session))
{
try
{
$facebook_id = $session['uid'];
$facebook_access_token=$session['access_token'];
// Updating Facebook values into Users table
mysql_query("UPDATE users SET facebook_uid='$facebook_id', facebook_access_token='$facebook_access_token' WHERE username='$user_session'");
header("Location: http://yourwebsite.com/home.php");
}
catch (Exception $e){}
}
else
{
header("Location: http://yourwebsite.com/home.php");
}
只想指出offline_access权限已被删除。
https://developers.facebook.com/roadmap/offline-access-removal/
“虽然我们通过在开发应用程序迁移设置取出使用offline_access许可, ,我们现在允许 选项与长寿命到期时间使用access_tokens每次用户修改您的应用时,都可以更新 (请参阅下面的例外 )。“
随着更多的搜索,你会发现如何扩展访问令牌。
How to extend access token validity since offline_access deprecation
这里是https://stackoverflow.com/a/13224416/1753925工作示例:
$facebook->setExtendedAccessToken();
$access_token = $_SESSION["fb_".$fb_appId."_access_token"];
// now set it into the facebook object ....
$facebook->setAccessToken($access_token);
// now our fb object will use the new token as usual ...
$accessToken = $facebook->getAccessToken();
我可以知道你是如何让用户的访问令牌? – 2012-08-29 10:30:34