Могу ли я сохранить токен доступа Facebook и использовать его позже?
Я создаю веб-приложение (PHP), которое использует FB connect. Я успешно регистрирую / регистрирую пользователя с помощью 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 моего браузера и удалю файл cookie, в котором хранится сеанс FB, код не будет работать. Единственное, что у меня есть, это идентификатор FB пользователя, который я храню в DB. Есть ли способ опубликовать на стене пользователя, даже если сеансы FB потеряны? Имеет ли смысл хранить маркер доступа FB пользователя в БД для публикации на стене позже или маркер доступа относительно недолговечен?
вот пример ситуации, которая может произойти в мое приложение: пользователь нажимает кнопку fb, авторизует мое приложение, перенаправляется обратно на мой сайт, где я автоматически создаю учетную запись на основе данных, предоставленных FB, также я храню идентификатор пользователя FB, чтобы я мог войти в этого пользователя позже. Теперь он просматривает сайт, вводит некоторую информацию, и эта информация публикуется на его стене. Пока все в порядке. поскольку браузер пользователя содержит cookie, созданный FB. Теперь пользователь покидает сайт и связывается с администратором сайта. Админ открывает свой браузер, заходит в админ интерфейс и что-то постит от имени этого пользователя. Теперь, имея идентификатор FB этого пользователя и предполагая, что пользователь не отозвал разрешения, могу ли я все еще опубликовать это на его стене?
2 ответов
обновление: этот ответ больше не действителен, так как offline_access устарел.
вам нужно запросить разрешение offline_access. Проверьте разрешения doc.
редактировать за обновление и комментарии-некоторая информация об удалении offline_access может быть найдена здесь.
С 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');
надеюсь, что это поможет !