Если вам понадобится проверить какую-либо информацию о маркере доступа (имя пользователя, срок действия и т. д.), воспользуйтесь нашим инструментом отладки или конечной точкой 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 SDK ошибки API обычно отображаются с помощью экземпляров NSError
, которые передаются в обратные вызовы. См. дополнительные сведения об ошибках в iOS SDK.
В Android SDK ошибки API обычно отображаются с помощью объекта Response
, который передается в обратный вызов Requests
. Так, для получения экземпляра FacebookRequestError
можно использовать вызов response.getError()
.
Это три наиболее распространенные ошибки, касающиеся маркеров доступа. Сведения о других ошибках API см. в этой статье.