我有一個存儲用戶的訪問令牌(以及其他一些數據)的數據庫。當我授權用戶時,我的權限列表包括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