Facebook PHP SDK: обработка ошибок токена доступа

1

Читая документацию Facebook о токенах доступа, немного неясно, как на самом деле написать PHP-код для их обработки. Тестирование показывает немного, но я хотел бы сделать это правильно.

Итак, в моем приложении я использую Javascript SDK для входа в систему, и когда это произойдет, я делаю вызов Ajax для сохранения токена доступа. Сервер, который обрабатывает этот вызов, преобразует этот токен доступа в долгоживущий токен и сохраняет его в нашей БД. Все идет нормально.

Но в будущем вызовы PHP SDK, я хочу, чтобы обработать токен доступа истекает, или пользователь, недействительный токен. Мои основные вызовы SDK:

try
{
    $request = new Facebook\FacebookRequest( $this->fbApp, 
                                             $access_token, . . .);
    $response = $this->fb->getClient()->sendRequest($request);

    // some processing here
}
catch(Facebook\Exceptions\FacebookResponseException $ex) 
{
}
catch(Facebook\Exceptions\FacebookSDKException $ex)
{
}

Документация предполагает, что я улавливаю исключения, захватывая "сообщения об ошибках, создаваемые API", и дает следующую информацию:

{
  "error": {
    "message": "Error validating access token: Session has expired at unix time SOME_TIME. The current unix time is SOME_TIME.", 
    "type": "OAuthException", 
    "code": 190
  }
}

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

Мой главный вопрос: будут ли ошибки токена всегда выбрасываться как FacebookResponseExceptions? Я сделал тест с отменой авторизации приложения и получил код исключения 190, а также сообщение "Ошибка проверки маркера доступа: пользователь не имеет авторизованного приложения". Есть ли способ получить субкод? Или я просто предполагаю, что код ошибки 190 всегда означает отправить их обратно через процесс входа в систему?

А как насчет просроченных жетонов? Трудно проверить, будет ли это исключение, или будет ли ответ на вызов SDK ошибкой?

благодаря...

Теги:
facebook
facebook-graph-api

1 ответ

2

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

Список возможных кодов ошибок и общие инструкции о том, как вы обычно должны обращаться с ним, см. Https://developers.facebook.com/docs/graph-api/using-graph-api/v2.5#errors

Если вы столкнулись с таким OAuthException, вам может понадобиться отладить сохраненный вами токен, который скажет вам, является ли он еще действительным или нет: https://developers.facebook.com/docs/facebook-login/access -tokens # отладки

И если это так, вы можете сделать вызов для /me/permissions next, чтобы узнать, какие разрешения вы предоставили пользователю. Вы также можете проверить наличие определенного разрешения через /me/permissions/permission_name.

  • 0
    Все это звучит хорошо ... но в PHP я не получаю OAuthException, я получаю FacebookResponseException, по крайней мере, в случае, если кто-то деавторизирует приложение. Я не знаю, что я получу в случае просроченного токена.
  • 0
    Я имел в виду часть "type": "OAuthException" которую вы получаете. Проверять это должно быть безопасно (вместо сравнения строк в части message , которая может измениться в какой-то момент).
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню