我有一个存储用户访问令牌的数据库(以及其他一些数据)。我授权用户时,我的权限列表包括offline_access。
用户的访问令牌(客户端)始终是否与数据库中该用户的访问令牌相同?或者用户的注册令牌在注销,更改密码等时是否会发生变化?
答案 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");
}