Недопустимый токен доступа Facebook с сообщением "сеанс не совпадает с текущим сохраненным сеансом"? - PullRequest
33 голосов
/ 06 июня 2011

Недавно я начал получать эту ошибку при публикации в фиде ленты новостей пользователя приложения, у меня есть разрешение на автономный доступ к токенам доступа, и раньше они работали нормально.Эта ошибка появляется у 30-40% пользователей.

"Error validating access token: Session does not match current stored session.
This may be because the user changed the password since the time the session
was created or may be due to a system error."

Ответы [ 6 ]

34 голосов
/ 21 июля 2011

Ваш токен доступа может стать недействительным по ряду причин (истек срок действия, пользователь изменил пароль, пользователь деавторизовал ваше приложение, пользователь вышел из Facebook и т. Д.).Вы всегда должны учитывать этот сценарий.

Если ваши пользователи активны, легко получить новый токен доступа с конечной точки OAuth без необходимости что-либо делать / видеть.Если нет, вам следует составить план (например, по электронной почте), как вы получите их, чтобы они могли получить новый токен доступа.Сценарий, который вы описываете, не обязательно необычен.Вы можете найти некоторые примеры кода здесь для получения справки о том, как обращаться с токенами с истекшим сроком доступа.

2 голосов
/ 21 июля 2011

Это недокументированное, но я только что проверил его, и оно работает с токенами с истекшим сроком доступа. Должен работать с токенами доступа, которые были признаны недействительными, если вы знаете их идентификатор пользователя, и они не отозвали привилегии для вашего приложения. Во-первых, вы можете проверить, что у вас все еще есть необходимые разрешения, позвонив по следующему адресу:

https://graph.facebook.com/userID/permissions?access_token=appID|appSecret

Если у вас все еще есть права на публикацию, вы можете выдать HTTP-запрос POST по этому адресу:

https://graph.facebook.com/userID/feed с почтовыми параметрами access_token=appID|appSecret&message=test message

2 голосов
/ 20 июля 2011

Официально ознакомьтесь с сообщением в блоге на Facebook: How-To: Обработка маркеров доступа с истекшим сроком

1 голос
/ 05 июля 2012

Кажется, есть много вопросов о том, почему ваш токен истек бы так быстро.Я думаю, что могу пролить свет на это.Вот несколько сценариев, которые я нашел, которые вызывают это:

Существует очевидный;пользователь изменил свой пароль.С этим ничего не поделаешь.Им нужно будет повторно авторизовать ваше приложение.Остальные сценарии имеют дело с токенами страниц, которые похожи на токен для профиля пользователя, за исключением того, что они запрашивают /me/accounts с токеном пользователя действительного администратора страницы.Срок их действия истекает гораздо чаще.

Кажется, что если ЛЮБОЙ администратор страницы изменяет свой пароль (не обязательно тот, кто использует токен), это может привести к истечению срока действия токена.Кроме того, если в вашей системе есть несколько страниц с одним и тем же администратором, вызов /me/accounts часто обновляет ВСЕ токены для страниц, которые администрирует этот пользователь.Это означает, что если вы подключаете новую страницу для пользователя с существующими страницами, вам нужно будет обновить существующие токены страницы новыми, предоставленными /me/accounts.

Наконец, способ, которым я с этим справляюсь,моя система должна хранить пользователя-администратора и токен как родительский токен страницы в моей базе данных.Таким образом, когда мне нужно переподключить страницу или добавить новую страницу, система может искать и обновлять любые связанные токены страницы, полученные от /me/accounts.Это также позволяет автоматически пытаться обновить токен, вызывая /me/accounts, когда вы получаете исключение токена с истекшим сроком действия.

Надеюсь, что это поможет!

1 голос
/ 06 июня 2011

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

0 голосов
/ 20 июля 2012

Я также столкнулся с этой проблемой при доступе к комментариям к сообщениям из моей командной утилиты.В моем случае все работало нормально, пока вдруг я не получил ошибку:

Удаленный сервер возвратил ошибку: (400) Bad Request.

После диагностики проблемы я обнаружил, что токен доступа к Facebook истекает через некоторое время, хотя я создал его с параметром offline_access, как показано ниже:

https://www.facebook.com/dialog/oauth?client_id=[APPID]&redirect_uri=[URL]&scope=user_photos,email,user_birthday,user_online_presence,offline_access

После потери большого количества временина RND я обнаружил, что в расширенных настройках приложения есть опция для Удалить разрешение offline_access .Мой клиент включил его, и по этой причине срок действия моего токена истек.Посмотрите на изображение ниже:

Facebook offline access token

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...