API Facebook возвращается к обратному вызову, и иногда вызов /me не работает

Я использую PHP API Facebook для входа в систему. В большинстве случаев это удается. Здесь и там (я бы оценил 15%), после возврата к URL-адресу обратного вызова, при вызове

$url = 'me?fields=username,id';
$data = $this->facebook->api($url);

Вместо получения данных я получаю это исключение:

An active access token must be used to query information about the current user

Может ли это быть как-то связано с какой-то неправильной обработкой session с моей стороны?


person Noam    schedule 08.01.2014    source источник
comment
Можете ли вы воспроизвести ситуацию, когда он терпит неудачу? Возможно, это происходит, когда кто-то не принимает разрешения во время входа в систему?   -  person madebydavid    schedule 08.01.2014
comment
я заметил потерю данных из FB через несколько минут, например, 5-6, когда не взаимодействовал с FB или его приложением iframe. что я делаю, так это получаю данные из facebook один раз и сохраняю их в переменную $_SESSION. с этого момента я использую только файл cookie, потому что вы не потеряете его информацию, пока не отключите его или не закроете вкладку браузера.   -  person ggzone    schedule 08.01.2014
comment
@madebydavid Мне не удалось воспроизвести ситуацию. Я получил несколько жалоб от пользователей, а затем добавил журнал ошибок, который показал мне эту ошибку.   -  person Noam    schedule 08.01.2014
comment
@ggzone это происходит сразу после входа в систему. После этого я фактически сохраняю долгоживущий токен и использую его. Какой var вы сохраняете в сеансе?   -  person Noam    schedule 08.01.2014
comment
Я бы сначала добавил некоторый код для проверки ошибки, возвращаемой из потока входа в FB, чтобы проверить, возникает ли проблема только для пользователей, которые не принимают разрешения — см. подробности чтения ошибки на странице redirect_uri здесь — developers.facebook.com/docs/facebook-login/ если это не сработает, я выйду из пользовательских агентов, чтобы увидеть, есть ли шаблон (возможно, не работает для одного браузера), а затем, если это не даст никаких результатов, я подумаю о повторной попытке авторизации, отправив пользователь возвращается к потоку входа в систему - у него есть максимальное количество повторных попыток.   -  person madebydavid    schedule 08.01.2014
comment
вся информация, предоставленная некоторым приложением, например. после запроса facebook вы можете получить данные с классом facebook в API -> $facebook->getUser()... это то, что я храню в сеансе   -  person ggzone    schedule 08.01.2014
comment
@madebydavid сделал, как ты предложил. Все еще иногда видишь, что в $_GET нет доказательств ошибки, что пользователь не принял разрешения, и ?code и &state кажутся в порядке. Тем не менее /me возвращает An active access token must be used to query information about the current user Есть идеи?   -  person Noam    schedule 08.01.2014
comment
Странно, возможно, FB SDK не меняет код на токен доступа в определенных ситуациях — попробуйте сначала вызвать $this->facebook->getUser() перед вызовом ->api — это должно заставить его поменять код на токен доступа.   -  person madebydavid    schedule 08.01.2014
comment
Может потребоваться сбросить токен доступа перед вызовом stackoverflow.com/questions/20918712/   -  person Abhik Chakraborty    schedule 10.01.2014