Подтвердить что ты не робот

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

Я недавно начал получать эту ошибку во время публикации в потоке новостей в 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."
4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Если у вас все еще есть разрешения publish_stream, вы можете отправить HTTP POST на этот URL:

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

Ответ 3

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

Ответ 5

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

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

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

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

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

Ответ 6

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

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

После диагностики проблемы я обнаружил, что токен доступа 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