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:
connected).not_authorized).unknown).No carregamento da página, o estado do usuário é uma das primeiras coisas que o aplicativo precisa saber.
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.
}
});
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.
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.
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.
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.
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).
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).
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.
Normalmente, o evento auth.authResponseChange será usado. Em alguns casos, será necessário diferenciar estes três estados:
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.
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.
| 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 é |