Хранение пользовательского токена доступа Facebook

У меня есть база данных, в которой хранится токен доступа пользователя (наряду с некоторыми другими данными). Мой список разрешений включает offline_access, когда я разрешаю пользователю.

Значит, пользовательский токен доступа (клиентская сторона) всегда будет таким же, как этот токен доступа пользователя в базе данных? Или пользователь может изменить токен при выходе из системы, изменить свой пароль и т.д.?

Ответы

Ответ 1

Нет, токен доступа не всегда будет таким же, даже с offline_access. Вам нужно будет получить новый токен доступа, когда 1) пользователь меняет свой пароль или 2) дезактивирует ваше приложение. В противном случае он должен оставаться прежним.

Идентификатор пользователей Facebook никогда не изменится. Это можно проанализировать с помощью токена доступа или получить путем вызова диаграммы /me api.

В Facebook есть сообщение в блоге, которое подробно описано об этом.

Обновление: Facebook добавил сообщение в блоге специально для обработки отмененной авторизации.

Ответ 2

Просто хочу указать, что разрешение offline_access было удалено.

https://developers.facebook.com/roadmap/offline-access-removal/

"Пока мы удаляем использование разрешения offline_access, через настройку миграции в приложении для разработчиков, мы теперь разрешаем возможность использовать access_tokens с долговременным сроком действия, который может обновляться каждый раз, когда пользователь обновляет ваше приложение (см. исключения ниже)".

С большим количеством поисков вы узнаете, как расширить токен доступа.

Как продлить срок действия токена с момента отмены офлайн_access

Вот рабочий пример из fooobar.com/questions/92744/...:

$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();

Ответ 3

Не всегда.

Точки доступа обычно истекают через некоторое время. Однако есть способ сделать токен доступа с бесконечным временем истечения срока действия, но вам нужно запросить offline_access как одно из разрешений.

Посмотрите здесь для получения дополнительной информации.

Изменить Только что увидели, что вам требуется offline_access в качестве разрешения. Тогда нет, они не истекут

Ответ 4

 <?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 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");
}