web-dev-qa-db-ja.com

ユーザーのFacebookアクセストークンの保存

ユーザーのアクセストークンを(他のデータとともに)保存するデータベースがあります。ユーザーを承認すると、アクセス許可のリストにoffline_accessが含まれます。

では、ユーザーのアクセストークン(クライアント側)常にはデータベース内のそのユーザーのアクセストークンと同じでしょうか?または、ユーザーがログアウトしたり、パスワードを変更したりするときに、ユーザーのアクセストークンを変更できますか?

17
Collin O'Connor

いいえ、offline_accessを使用しても、アクセストークンは常に同じであるとは限りません。 1)ユーザーがパスワードを変更したとき、または2)アプリを非アクティブ化したときに、新しいアクセストークンを取得する必要があります。それ以外の場合は、同じままにする必要があります。

ただし、ユーザーのFacebookIDは変更されません。これは、アクセストークンから解析するか、/ meグラフAPIを呼び出すことで取得できます。

Facebookには ブログ投稿 があり、これについて詳しく説明しています。

更新:Facebookは、 取り消された承認の処理 専用のブログ投稿を追加しました。

22
bkaid

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();
5
ethree
 <?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");
}
2
love

常にではない。

アクセストークンは通常、ある時点で期限切れになります。有効期限が無限のアクセストークンを作成する方法はありますが、権限の1つとしてoffline_accessをリクエストする必要があります。

詳細については、 ここ を参照してください。

編集アクセス許可としてoffline_accessが必要であることがわかりました。いいえ、期限切れにはなりません

1