Могу ли я хранить токен доступа к Facebook и использовать его позже?
Я создаю веб-приложение (PHP), которое использует соединение FB. Я успешно регистрирую/регистрирую пользователя с помощью PHP lib, предоставленного facebook. Также я могу опубликовать на стене, используя этот код
Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYPEER] = false;
Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYHOST] = 2;
$facebook = new Facebook(array(
'appId' => $fb_key,
'secret' => $fb_secret,
'cookie' => true, // enable optional cookie support
));
$session = $facebook->getSession();
if ($session)
{
$facebook->api('/me/feed', 'POST', array('message'=>$message, 'link'=>$link['href'], 'name'=>$link['text']));
}
Однако, если я вручную перейду в менеджер куки файлов браузера и удалю файл cookie, который хранит сеанс FB, код не работает. Единственное, что у меня есть, - это идентификатор пользователя FB, который я храню в БД. Есть ли способ опубликовать на стене пользователя, даже если сеансы FB потеряны? Имеет ли смысл хранить токен доступа пользователя FB в БД для отправки на стену позже или токен доступа относительно недолговечен?
Вот пример ситуации, которая может произойти в моем приложении:
пользователь нажимает кнопку fb, авторизует мое приложение, перенаправляется обратно на мой сайт, где я автоматически создаю учетную запись на основе данных, предоставленных FB, также я сохраняю идентификатор пользователя FB, чтобы позднее мог войти в этот пользователь. Теперь он просматривает сайт, вводит какую-то информацию, и эта информация отправляется на его стену. Пока все в порядке, потому что в пользовательском браузере хранится файл cookie, созданный FB. Теперь пользователь покидает сайт и связывается с администратором сайта. Admin открывает свой собственный браузер, переходит в интерфейс администратора и отправляет что-то от имени этого пользователя. Теперь, имея идентификатор пользователя FB и предполагая, что пользователь не отменил разрешения, могу ли я разместить его на стене?
Ответы
Ответ 1
ОБНОВЛЕНИЕ. Этот ответ больше недействителен, так как устаревший автономный_access.
Вам необходимо запросить разрешение offline_access. Проверьте permissions doc.
EDIT В обновлении и комментариях можно найти некоторую информацию об удалении offline_access здесь.
Ответ 2
С Facebook PHP SDK v3 (см. в github), довольно просто спросить и использовать токен доступа к Интернету. Вот как вы это делаете.
Получить токен доступа к Интернету
Сначала вы проверяете, зарегистрирован ли пользователь или нет:
require "facebook.php";
$facebook = new Facebook(array(
'appId' => YOUR_APP_ID,
'secret' => YOUR_APP_SECRET,
));
$user = $facebook->getUser();
if ($user) {
try {
$user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
$user = null;
}
}
Если это не так, вы создаете URL-адрес "Войти с Facebook" с запросом разрешения offline_access
:
if (!$user) {
$args['scope'] = 'offline_access';
$loginUrl = $facebook->getLoginUrl($args);
}
И затем отобразите ссылку в шаблоне:
<?php if (!$user): ?>
<a href="<?php echo $loginUrl ?>">Login with Facebook</a>
<?php endif ?>
Затем, когда пользователь вошел в систему, вы можете получить токен доступа к сети и сохранить его. Чтобы получить его, звоните:
if ($user) {
$token = $facebook->getAccessToken();
// store token
}
Использовать токен доступа к сети
Использовать токен доступа к сети, когда пользователь не выполнил вход:
require "facebook.php";
$facebook = new Facebook(array(
'appId' => YOUR_APP_ID,
'secret' => YOUR_APP_SECRET,
));
$facebook->setAccessToken("...");
И теперь вы можете совершать вызовы API для этого пользователя:
$user_profile = $facebook->api('/me');
Надеюсь, что это поможет!