Хранение пользовательского токена доступа 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");
}