ユーザーのアクセストークンを(他のデータとともに)保存するデータベースがあります。ユーザーを承認すると、アクセス許可のリストにoffline_accessが含まれます。
では、ユーザーのアクセストークン(クライアント側)常にはデータベース内のそのユーザーのアクセストークンと同じでしょうか?または、ユーザーがログアウトしたり、パスワードを変更したりするときに、ユーザーのアクセストークンを変更できますか?
いいえ、offline_accessを使用しても、アクセストークンは常に同じであるとは限りません。 1)ユーザーがパスワードを変更したとき、または2)アプリを非アクティブ化したときに、新しいアクセストークンを取得する必要があります。それ以外の場合は、同じままにする必要があります。
ただし、ユーザーのFacebookIDは変更されません。これは、アクセストークンから解析するか、/ meグラフAPIを呼び出すことで取得できます。
Facebookには ブログ投稿 があり、これについて詳しく説明しています。
更新:Facebookは、 取り消された承認の処理 専用のブログ投稿を追加しました。
Offline_access権限が削除されたことを指摘したかっただけです。
https://developers.facebook.com/roadmap/offline-access-removal/
「開発者アプリの移行設定により、offline_access権限の使用を削除する一方で、ユーザーがアプリを再登録するたびに更新できる有効期限の長いaccess_tokensを使用するオプションを許可するようになりました(を参照)。以下の例外)。」
さらに検索すると、アクセストークンを拡張する方法がわかります。
offline_accessの非推奨以降にアクセストークンの有効性を拡張する方法
これは 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();
<?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");
}
常にではない。
アクセストークンは通常、ある時点で期限切れになります。有効期限が無限のアクセストークンを作成する方法はありますが、権限の1つとしてoffline_access
をリクエストする必要があります。
詳細については、 ここ を参照してください。
編集アクセス許可としてoffline_accessが必要であることがわかりました。いいえ、期限切れにはなりません