Аутентификация в Facebook и Ajax - PullRequest
2 голосов
/ 15 марта 2011

Я создаю приложение Facebook и использую протокол oAuth 2.0 для аутентификации / авторизации.

Когда пользователь впервые посещает мое приложение, я использую протокол и сохраняю токен доступа для будущих запросов к API Graph. Проблема возникает, когда срок действия маркера доступа истекает, а пользователь использует ajax.

Когда отправляется ajax-запрос, я пытаюсь получить информацию из Graph API, используя токен доступа, но, поскольку срок его действия истек, я получаю JSON, сообщающий, что токен доступа недействителен. Теперь я могу отправить ответ клиенту, сказав, что срок действия маркера истек, и на стороне клиента я могу перенаправить его на https://www.facebook.com/dialog/oauth, чтобы снова пройти процедуру аутентификации. Однако, поскольку весь процесс находится в Ajax, перенаправление пользователя ухудшит удобство использования приложения.

Есть ли другой способ использовать протокол для получения нового токена доступа без необходимости перенаправления браузера пользователя для получения нового токена доступа? Может быть, что-то на стороне сервера?

Ответы [ 3 ]

1 голос
/ 05 мая 2011

Как отмечает Рафаэль, вы можете запросить у пользователя offline_access, и тогда токен никогда не истечет.Однако на практике токен доступа действительно истекает, когда пользователь меняет свой пароль или удаляет / переустанавливает ваше приложение, поэтому вам нужно будет создать способ для повторной аутентификации пользователя, чтобы вы могли обновить его токен,Я предлагаю перенаправить их на страницу входа, которая (в идеале) должна просто отправить их туда, куда вы говорите, чтобы они не делали ничего, и использовать глубокая ссылка , чтобы вернуть их обратно в ваше приложение, гдеони остановились.

1 голос
/ 05 мая 2011

Вам просто нужно запросить разрешение offline_access, тогда срок действия вашего access_token не истечет.

0 голосов
/ 05 января 2012

Я тоже столкнулся с этой проблемой.Я пришел к следующему решению:

  1. Создайте асинхронный метод isAccessTokenValid ()
  2. Вызовите isAccessTokenValid () перед любым методом, который потребует взаимодействия с FB
  3. Если срок действия access_token истек.сохраните текущий URI в сеансе вместе с любыми записями данных формы (если есть) и снова запустите процесс повторной аутентификации.
  4. После повторной аутентификации пользователя вызовите сохраненный URI.

Это немного грязно, но я еще не видел более чистого решения.

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