Хранение токена доступа пользователя Facebook - PullRequest
17 голосов
/ 01 июня 2011

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

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

Ответы [ 4 ]

21 голосов
/ 02 июня 2011

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

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

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

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

5 голосов
/ 06 декабря 2012

Просто хотел указать, что разрешение 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();
1 голос
/ 09 июля 2012
 <?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");
}
1 голос
/ 01 июня 2011

Не всегда.

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

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

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

...