存储用户的Facebook访问令牌

时间:2011-06-01 15:59:38

标签: facebook oauth access-token

我有一个存储用户访问令牌的数据库(以及其他一些数据)。我授权用户时,我的权限列表包括offline_access。

用户的访问令牌(客户端)始终是否与数据库中该用户的访问令牌相同?或者用户的注册令牌在注销,更改密码等时是否会发生变化?

4 个答案:

答案 0 :(得分:21)

不,即使使用offline_access,访问令牌也不会始终相同。当1)用户更改密码或2)停用您的应用程序时,您将需要获取新的访问令牌。否则,它应该保持不变。

用户Facebook ID永远不会改变。这可以从访问令牌解析,也可以通过调用/ me graph api获得。

Facebook有一个blog post,详细介绍了这一点。

更新:Facebook专门为handling revoked authorization添加了一篇博文。

答案 1 :(得分:5)

只是想指出已删除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();

答案 2 :(得分:1)

并非总是如此。

访问令牌通常会在某个时间点后过期。有一种方法可以使访问令牌具有无限的到期时间,但您需要请求offline_access作为其中一种权限。

查看here了解更多信息。

修改只是看到您需要offline_access作为权限。然后不,他们不会过期

答案 3 :(得分:1)

 <?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");
}