Сессия была признана недействительной, потому что пользователь изменил пароль

Реализуя приложение PhoneGap для Android и iOS, приложение использует Facebook Connect и плагин PhoneGap Facebook Connect ( https://github.com/davejohnson/phonegap-plugin-facebook-connect). Несколько дней назад у меня начались проблемы с access_token, но только на Android, тот же сценарий работает на iOS без проблем. Шаг за шагом:

  1. Init facebook. (используя функцию плагина)
  2. Зайди в Фейсбук. (используя функцию плагина) (спрашивая разрешения: 'email user_birthday publish_stream offline_access')
  3. Сделайте график api call /me с помощью возвращенного мне токена.

Шаг 3 возвращает ошибку, и когда я беру URL-адрес, который вызывается, и помещаю его в браузер рабочего стола, он выдает мне сообщение об ошибке "Сеанс был признан недействительным, поскольку пользователь изменил пароль".

Приложение для песочницы / приложение без песочницы не имеет никакого значения.

Точно такие же шаги в iOS работает отлично.

Я видел много вопросов о SOF и Facebook об этом, но все они относятся к тому, чтобы позволить пользователю снова выполнить поток аутентификации или что проблема решилась сама собой через несколько дней.... Есть ли кто-то, кто может подтвердить, что это действительно ошибка на фейсбуке? Или есть решение? Или можете объяснить, почему он работает на Android, а не на iOS? Может быть, это может быть связано со мной в iOS, я не использую приложение facebook, но предпочитаю всегда использовать OAuth в браузере?

Спасибо за любые подсказки!

РЕДАКТИРОВАТЬ:

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

Как удалить все потенциально кэшированные токены или идентификаторы сеансов на Android?

Токен доступа немедленно аннулирован

1 ответ

Решение

Хорошо, в конце концов я обнаружил, что основной причиной моей проблемы было то, что Android и iOS facebook SDK по-разному обрабатывают offline_access, в значении, которое они установили в параметре 'expires' в объекте сеанса.

В iOS для "expires" будет задана дата в далеком будущем (4001-01-01), в то время как в Android "expires" будет установлен на 0. Это привело к сбою моего сравнения (expired

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

Другие вопросы по тегам