it-swarm.com.ru

Недопустимый токен доступа Facebook с сообщением "сеанс не совпадает с текущим сохраненным сеансом"?

Недавно я начал получать эту ошибку при публикации в фиде ленты новостей Facebook Пользователя приложения. У меня есть разрешение на автономный доступ к токенам доступа, и они работали Отлично ранее . Эта ошибка приходит для 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."
33
DhruvPathak

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

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

34
Jeff Bowen

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

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

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

https://graph.facebook.com/userID/feed с параметрами сообщения access_token=appID|appSecret&message=test message

2
bkaid

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

2
Syed I.R

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

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

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

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

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

1
thefreeman

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

1
Femi

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

Удаленный сервер возвратил ошибку: (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

0
Optimus