Como gerenciar permissões no Login do Facebook para a web

Uma das partes mais importantes da inicialização do diálogo Entrar é escolher a quais dados seu aplicativo terá acesso. Todos os exemplos a seguir usam o parâmetro scope, que é como você solicita acesso aos dados de uma pessoa. Eles são chamados de Permissões.

Você encontra informações mais detalhadas sobre elas no Guia de permissões. No entanto, ao lidar com permissões e com o diálogo Entrar, é preciso ter em mente o seguinte:

  • Quando o diálogo é criado, você solicita permissões. O conjunto de permissões resultante é vinculado ao token de acesso retornado.
  • Outras plataformas talvez tenham um conjunto de permissões diferente. Por exemplo, no iOS, você pode solicitar os lugares em que uma pessoa foi marcada. Já na versão web do aplicativo, essa permissão não é exigida para a experiência.
  • É possível adicionar permissões depois, quando outros recursos forem necessários. Se você precisar de uma nova permissão, basta adicioná-la à lista das já concedidas, reiniciar o diálogo Entrar e a nova permissão será solicitada.
  • O diálogo Entrar permite que as pessoas se recusem a compartilhar determinadas permissões com o aplicativo. O seu aplicativo deve lidar com essa situação. Saiba mais sobre isso no diálogo de permissões.
  • Os aplicativos que solicitam informações além dos campos padrão e da permissão emaildevem ser revisados pelo Facebook antes de serem disponibilizados para o público geral. Saiba mais na documentação sobre a análise de login e nas diretrizes gerais de análise.

Como adicionar permissões

Uma das melhores práticas com o Login do Facebook é não solicitar permissões de leitura e de publicação ao mesmo tempo. Para colaborar com essa prática, seu aplicativo pode solicitar outras permissões mais tarde, bem depois de o usuário entrar. Para isso, basta lançar o diálogo Entrar com a nova permissão.

Por exemplo, digamos que você tenha um botão Entrar com as seguintes permissões:

<fb:login-button scope="public_profile" onlogin="checkLoginState();">
</fb:login-button>

Caso tenha marcado /me/permissions para as permissões concedidas após a aceitação por parte do usuário, você verá o seguinte:

{"data":
  [
    {
      "permission":"public_profile",
      "status":"granted"
    }
  ]
}

Se você quiser adicionar a permissão email mais tarde, será possível inicializá-la novamente com a função FB.login() da seguinte maneira:

FB.login(function(response) {
   console.log(response);
}, {scope: 'email'});

(A chamada à função deve ser feita pelo controle de eventos de um botão. Caso contrário, provavelmente ela será impedida por bloqueadores de notificações pop-up do navegador.)

Observe que apenas a nova permissão é solicitada. Se você aceitá-la marcando /me/permissions, o resultado será este:

{"data":
  [
    {
      "permission":"public_profile",
      "status":"granted"
    },
    {
      "permission":"email",
      "status":"granted"
    }
  ]
}

A nova permissão email foi adicionada à lista de permissões aceitas.

Como solicitar novamente permissões recusadas

O Login do Facebook permite que as pessoas recusem o compartilhamento de algumas permissões com seu aplicativo. Se alguém recusar user_likes (Curtidas), marcando /me/permissions para as permissões concedidas, isso resultará em:

{
  "data":
    [
      {
        "permission":"public_profile",
        "status":"granted"
      },
      {
        "permission":"user_likes",
        "status":"declined"
      }
    ]
}

Observe que user_likes foi recusada em vez de concedida.

Não é um problema solicitar uma vez que alguém conceda ao aplicativo permissões que foram recusadas anteriormente. Você deve ter uma tela de instrução na qual a pessoa pode conceder a permissão para você e, em seguida, pedir novamente. Contudo, se você usar o método descrito na sessão anterior, o diálogo Entrar não solicitará essa permissão.

Isso ocorre porque, quando alguém recusa a permissão, a caixa de diálogo Entrar não volta a pedir a essa pessoa, a menos que você diga explicitamente à caixa de diálogo que está pedindo novamente uma permissão recusada.

Você pode fazer isso adicionando a sinalização auth_type: rerequest à chamada FB.login():

FB.login(
  function(response) {
    console.log(response);
  },
  {
    scope: 'user_likes',
    auth_type: 'rerequest'
  }
);

Com isso, o diálogo Entrar solicitará novamente a permissão recusada. O diálogo será muito parecido com aquele na seção sobre como solicitar novamente permissões, mas será possível fazer outra solicitação de uma permissão recusada.