存储用户的 Facebook 访问令牌
Posted
技术标签:
【中文标题】存储用户的 Facebook 访问令牌【英文标题】:Storing a user's Facebook access token 【发布时间】:2011-09-06 10:38:57 【问题描述】:我有一个存储用户访问令牌(以及其他一些数据)的数据库。当我授权用户时,我的权限列表包括 offline_access。
那么用户的访问令牌(客户端)总是是否与数据库中该用户的访问令牌相同?或者用户在注销、更改密码等时可以更改访问令牌吗?
【问题讨论】:
请问您是如何获得用户的访问令牌的? 【参考方案1】:并非总是如此。
访问令牌通常会在某个时间点后过期。虽然有一种方法可以制作具有无限过期时间的访问令牌,但您需要请求 offline_access
作为权限之一。
查看here了解更多信息。
编辑刚刚看到您需要offline_access 作为权限。那么不,它们不会过期
【讨论】:
【参考方案2】:不,即使使用offline_access,访问令牌也不总是相同的。当 1) 用户更改密码或 2) 停用您的应用时,您将需要获取新的访问令牌。否则,它应该保持不变。
但用户的 Facebook id 永远不会改变。这可以从访问令牌中解析出来,也可以通过调用 /me graph api 获得。
Facebook 有一个blog post 对此进行了详细说明。
更新:Facebook 专门为 handling revoked authorization 添加了一篇博文。
【讨论】:
在我的数据库中,我存储了与访问令牌相关的高分。由于该访问令牌可能过期并且与数据库的访问令牌不同,因此用户的高分将被“擦除”。您对如何解决这个问题有任何想法吗? 简单 - 只需将其与他们的 facebook 用户 ID 一起存储 - 这永远不会改变。 我完全忘记了用户有一个用户 ID。那么将用户的访问令牌存储在数据库中是否有任何意义? 如果您想调用 Facebook,则需要存储该令牌。但是,如果您实际上并不需要这些权限,则不应请求诸如 offline_access 之类的权限,因为这会增加用户拒绝您的申请的机会。 用户每次从不同设备登录时访问令牌都会更改,我是否正确?【参考方案3】: <?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");
【讨论】:
【参考方案4】:只是想指出,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://***.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();
【讨论】:
以上是关于存储用户的 Facebook 访问令牌的主要内容,如果未能解决你的问题,请参考以下文章
官方 Facebook 应用程序是不是存储一些开放数据,例如访问令牌等
firebase auth是否可以存储和管理不同提供商的访问令牌?