Tokens de acesso: Depuração e tratamento de erros

Como obter informações sobre tokens e depuração

Ao trabalhar com um token de acesso, talvez você precise verificar quais informações estão associadas a ele, como o usuário ou a validade. Para obter essas informações, use nossa ferramenta de depuração ou o ponto de extremidade da API.

Para usar a API, emita uma solicitação da Graph API:

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

Substitua {input-token} pelo token de acesso sobre o qual você quer obter informações e {access-token} por um token de acesso válido. Os tokens devem ser do mesmo aplicativo.

A resposta da chamada da API é uma matriz JSON semelhante a esta:

{ "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" } } 

Para tokens de acesso de longa duração, o campo issued_at também é retornado.

Como lidar com erros

O Facebook não notificará que um token de acesso se tornou inválido. A menos que você tenha enviado o tempo de expiry para o aplicativo junto com o token de acesso, ele somente saberá que um determinado token se tornou inválido ao ser feita uma solicitação à API.

Devido a eventos relacionados à segurança, os tokens de acesso podem ser invalidados antes do tempo de expiração esperado.

Na maioria dos aplicativos, a melhor maneira de lidar com tokens expirados é capturar as mensagens de erro geradas pela API. Em cada caso, a API retornará uma mensagem de erro, um código e um subcódigo em um corpo JSON, explicando a natureza do erro. Para mais informações sobre códigos e subcódigos, consulte o documento de referência sobre códigos de erro.

Tokens de acesso expirados ou inválidos

Exemplo de resposta de token expirado

{
  "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"
  }
}

Exemplo de resposta de token invalidado

Esta resposta é enviada quando uma pessoa sai do aplicativo ou altera a senha.

{
  "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"
  }
}

A pessoa precisará fazer login novamente para obter um token de acesso válido. Assim, você poderá fazer chamadas de API em nome dela. O fluxo de login que o aplicativo usa para novas pessoas determina o método que precisa ser usado.

Exemplo de resposta de erro de autorização de aplicativo

Ao revogar uma autorização ou não autorizar o aplicativo, a resposta a erro será semelhante à de uma pessoa nova no seu aplicativo.

Exemplo de resposta de token sem autorização

{
  "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"
  }
}
}

Como lidar com erros de tokens nos aplicativos iOS

Os erros de API no SDK do iOS normalmente são detectados pelas instâncias de NSError transmitidas aos retornos de chamada. Consulte a documentação sobre erros do SDK do iOS para obter mais detalhes.

Como lidar com erros de tokens nos aplicativos Android

Os erros de API no Android SDK normalmente são detectados pelo objeto Response transmitido aos retornos de chamada das Requests. Especificamente, você pode chamar response.getError() para recuperar uma instância de FacebookRequestError.

Saiba mais

Leia sobre outros erros em nossa Referência de erros da API, mas esses três erros abordados são os mais comuns ao lidarmos com tokens de acesso.