Маркеры доступа: отладка и обработка ошибок

Получение информации о маркерах доступа и их отладка

Если вам понадобится проверить какую-либо информацию о маркере доступа (имя пользователя, срок действия и т. д.), воспользуйтесь нашим инструментом отладки или конечной точкой API.

В последнем случае следует отправить запрос к API Graph:

curl -i -X GET "https://graph.facebook.com/debug_token?
  input_token={input-token}&
  access_token={valid-access-token}

Вместо {input-token} укажите маркер доступа, информация о котором вам нужна, а вместо {access-token} — действительный маркер доступа. Оба маркера должны относиться к одному приложению.

В ответ на вызов API вы получите массив JSON, который будет выглядеть примерно так:

{ "data":{ "app_id":"{app-id}", "type":"USER", "application":"{app-name}", "data_access_expires_at":1576687825, "expires_at":1570820400, "is_valid":true, "scopes":[ "pages_show_list", "public_profile" ], "granular_scopes":[ { "scope":"pages_show_list", "target_ids":[ "{page-1-app-can-access-id}", "{page-2-app-can-access-id}" ] } ], "user_id":"10215241773831025" } } 

Если запрос относится к маркеру доступа длительного действия, ответ также будет содержать поле issued_at.

Обработка ошибок

Facebook не уведомляет об истечении срока действия маркеров доступа. Если вместе с маркером доступа в приложение не передавалось время expiry, то вы узнаете, что он недействителен, только когда попытаетесь отправить запрос к API.

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

В большинстве случаев для решения проблемы с недействительным маркером доступа в приложении рекомендуется проверить сообщение об ошибке, поступившее от API. Это объект JSON, содержащий код и подкод ошибки, по которым можно понять ее суть. Подробную информацию о них см. в статье о кодах ошибок.

Недействительные и просроченные маркеры доступа

Пример ответа: маркер с истекшим сроком действия

{
  "error": {
    "message": "Error validating access token: Session has expired on Wednesday, 14-Feb-18 18:00:00 PST. The current time is Thursday, 15-Feb-18 13:46:35 PST.",
    "type": "OAuthException",
    "code": 190,
    "error_subcode": 463,
    "fbtrace_id": "H2il2t5bn4e"
  }
}

Пример ответа: недействительный маркер

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

{
  "error": {
    "message": "Error validating access token: The session is invalid 
                because the user logged out.", 
    "type": "OAuthException", 
    "code": 190,
    "error_subcode": 460,
    "fbtrace_id": "H2il2t5bn4e"
  }
}

Этому пользователю нужно будет вновь войти в приложение, чтобы получить действительный маркер доступа. Тогда вы вновь сможете делать вызовы к API от имени этого пользователя. Выбор метода зависит от того, какой механизм входа применяется для новых пользователей приложения.

Пример ответа: ошибка получения разрешения для приложения

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

Пример ответа: отозванное разрешение для маркера

{
  "error": {
    "message": "Error validating access token: User {user-id} has 
                not authorized application {your-app-id}.", 
    "type": "OAuthException", 
    "code": 190,
    "error_subcode": 458,
    "fbtrace_id": "H2il2t5bn4e"
  }
}
}

Обработка ошибок маркеров в приложениях для iOS

В iOS SDK ошибки API обычно отображаются с помощью экземпляров NSError, которые передаются в обратные вызовы. См. дополнительные сведения об ошибках в iOS SDK.

Обработка ошибок маркеров в приложениях для Android

В Android SDK ошибки API обычно отображаются с помощью объекта Response, который передается в обратный вызов Requests. Так, для получения экземпляра FacebookRequestError можно использовать вызов response.getError().

Подробнее

Это три наиболее распространенные ошибки, касающиеся маркеров доступа. Сведения о других ошибках API см. в этой статье.