ユーザーのアクセストークンを(他のデータとともに)保存するデータベースがあります。ユーザーを承認するときの権限のリストには、offline_accessが含まれています。
では、ユーザーのアクセストークン(クライアント側)は、データベース内のそのユーザーのアクセストークンと常に同じでしょうか?または、ユーザーがログアウトしたり、パスワードを変更したりするときに、ユーザーのアクセストークンを変更できますか?
ユーザーのアクセストークンを(他のデータとともに)保存するデータベースがあります。ユーザーを承認するときの権限のリストには、offline_accessが含まれています。
では、ユーザーのアクセストークン(クライアント側)は、データベース内のそのユーザーのアクセストークンと常に同じでしょうか?または、ユーザーがログアウトしたり、パスワードを変更したりするときに、ユーザーのアクセストークンを変更できますか?
No, the access token will not always be the same, even with offline_access. You will need to get a new access token when 1) the user changes their password or 2) deactivates your app. Otherwise, it should remain the same.
The users Facebook id will never change though. This can be parsed from the access token or obtained by calling the /me graph api.
Facebook has a blog post that goes on in detail about this.
Update: Facebook added a blog post specifically for handling revoked authorization.
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");
}
常にではない。
アクセストークンは通常、ある時点で期限切れになります。有効期限が無限のアクセストークンを作成する方法はありますが、offline_access
アクセス許可の1つとしてリクエストする必要があります。
詳細については、こちらをご覧ください。
編集アクセス許可としてoffline_accessが必要であることがわかりました。いいえ、期限切れにはなりません