Status de login

O FB.getLoginStatus() permite que você identifique se um usuário está conectado ao Facebook e faz a autenticação no seu app. Existem três estados possíveis para um usuário:

  1. O usuário entrou no Facebook e forneceu autorização ao seu aplicativo (connected).
  2. O usuário entrou no Facebook, mas não forneceu autorização ao aplicativo (not_authorized).
  3. O usuário não entrou no Facebook ou encerrou a sessão do seu aplicativo para que ele não tente se conectar ao Facebook. Por isso, não temos como saber o aplicativo foi autenticado ou não (unknown).

No carregamento da página, o estado do usuário é uma das primeiras coisas que o aplicativo precisa saber.

Exemplo

Para verificar se o usuário fez a autenticação no app:

FB.getLoginStatus(function(response) {
  if (response.status === 'connected') {
    // The user is logged in and has authenticated your
    // app, and response.authResponse supplies
    // the user's ID, a valid access token, a signed
    // request, and the time the access token 
    // and signed request each expire.
    var uid = response.authResponse.userID;
    var accessToken = response.authResponse.accessToken;
  } else if (response.status === 'not_authorized') {
    // The user hasn't authorized your application.  They
    // must click the Login button, or you must call FB.login
    // in response to a user gesture, to launch a login dialog.
  } else {
    // The user isn't logged in to Facebook. You can launch a
    // login dialog with a user gesture, but the user may have
    // to log in to Facebook before authorizing your application.
  }
 });

Objetos de resposta

Caso o usuário tenha feito a autenticação, o objeto de resposta terá esta aparência:

{
    status: 'connected',
    authResponse: {
        accessToken: '...',
        expiresIn:'...',
        signedRequest:'...',
        userID:'...'
    }
}

Em alguns casos, você receberá uma authResponse, mas o app não poderá fazer outras chamadas. Isso pode acontecer se o app tiver sido removido das configurações sem que a página da web usando o JS SDK tenha sido atualizada. Portanto, também é necessário verificar a mensagem de status para esse problema.

A ausência do objeto authResponse demonstra que o usuário não entrou no Facebook ou não autorizou o app.

As partes mais úteis da authResponse são o userID e o accessToken. O token de acesso pode ser usado​ para fazer solicitações a APIs do Facebook em nome de um usuário. Já o userID é o identificador único do usuário presente no seu app.

Ida e volta para os servidores do Facebook

Para melhorar o desempenho do aplicativo, nem todas as chamadas de verificação de status resultarão em uma solicitação aos servidores do Facebook. Sempre que possível, a resposta será armazenada em cache. Na primeira chamada a FB.getLoginStatus na sessão do navegador, ou quando o JS SDK for iniciado com status: true, o objeto de resposta será armazenado em cache pelo SDK. As chamadas subsequentes a FB.getLoginStatus retornarão os dados da resposta armazenada em cache.

Isso pode causar problemas caso o usuário tenha iniciado/encerrado uma sessão no Facebook ou removido o aplicativo nas configurações da conta depois da última pesquisa completa.

Para evitar isso, faça uma chamada a FB.getLoginStatus com o segundo parâmetro definido como true a fim de forçar uma ida e volta, o que atualizará o cache do objeto de resposta.

FB.getLoginStatus(function(response) {
  // this will be called when the roundtrip to Facebook has completed
}, true);

Se você fizer chamadas a FB.getLoginStatus a cada carregamento de página, não defina esse parâmetro em todas elas. Isso aumentaria significativamente o número de solicitações aos servidores do Facebook e prejudicaria o desempenho do aplicativo.

Verificar o status do usuário no carregamento da página

Mesmo que seja possível fazer chamadas a FB.getLoginStatus a qualquer momento (por exemplo, quando o usuário tenta realizar uma ação social), a maioria dos apps sociais precisa saber o status do usuário o mais rápido possível após a página carregar. Nesse caso, em vez de fazer uma chamada a FB.init, é possível verificar o status do usuário definindo status: true na chamada a FB.getLoginStatus.

Para receber a resposta da chamada, você precisa assinar o evento auth.statusChange. O objeto de resposta desse evento é idêntico ao que seria retornado na chamada a FB.getLoginStatus.

Eventos de status de login

Se você assinar os eventos de autenticação disparados pelo JS SDK, o seu app será notificado caso o estado da sessão do usuário mude. Isso é importante porque o estado da sessão pode mudar devido a interações do usuário que fogem do controle do app. A assinatura do evento é a única maneira de o app ser notificado sobre essas alterações.

Exemplos de interações que podem alterar o estado do usuário incluem FB.login(), FB.logout() e o botão de Login. Widgets como o plugin de comentários também podem acionar a autenticação.

auth.login

Esse evento é disparado quando o app reconhece o usuário pela primeira vez (ou seja, recebe uma sessão quando ainda não tinha nenhuma válida).

auth.logout

Esse evento é disparado quando o app determina que não existe mais um usuário válido (ou seja, havia uma sessão, mas não é possível validar o usuário atual).

auth.authResponseChange

Esse evento é disparado por qualquer mudança relacionada à autenticação, uma vez que todas elas afetam a sessão (entrar, sair, atualizar a sessão). As sessões são atualizadas ao longo do tempo desde que o usuário esteja ativo no app.

auth.statusChange

Normalmente, o evento auth.authResponseChange será usado. Em alguns casos, será necessário diferenciar estes três estados:

  • Conectado
  • Entrou no Facebook, mas não se conectou ao aplicativo
  • Não entrou no Facebook

As funções FB.Event.subscribe e FB.Event.unsubscribe são usadas para assinar esses eventos. Por exemplo:

FB.Event.subscribe('auth.login', function(response) {
  // do something with response
});

O objeto de resposta a todos esses eventos é o mesmo que o de FB.getLoginStatus, FB.login ou FB.logout. O objeto de resposta inclui o seguinte:

status

O status do usuário. connected, not_authorized ou unknown.

authResponse

O objeto authResponse.

Configuração

Para usar os métodos de autenticação, o app precisará ser configurado com um domínio de app. Isso pode ser feito na página de configurações.


Parâmetros

Nome Tipo Obrigatório Descrição

cb

Função

Sim

A função de retorno de chamada.

force

Booliano

Sim

Força o recarregamento do status de login (o padrão é false).