Читая документацию 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 ошибкой?
благодаря...
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
.
"type": "OAuthException"
которую вы получаете. Проверять это должно быть безопасно (вместо сравнения строк в частиmessage
, которая может измениться в какой-то момент).