Pergunta

Estou construindo um aplicativo da web (PHP) que usa o FB Connect. Eu registro com sucesso / inscrição no usuário com a ajuda do PHP LIB fornecido pelo Facebook. Também posso postar na parede, usando este código

        Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYPEER] = false;
    Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYHOST] = 2;               
    $facebook = new Facebook(array(
      'appId'  => $fb_key,
      'secret' => $fb_secret,
      'cookie' => true, // enable optional cookie support
    ));
    $session = $facebook->getSession();
    if ($session)
    {
        $facebook->api('/me/feed', 'POST', array('message'=>$message, 'link'=>$link['href'], 'name'=>$link['text']));                   
    }

No entanto, se eu for manualmente ao gerente de cookies do meu navegador e excluir o cookie que armazena a sessão do FB, o código não funciona. A única coisa que tenho é o ID do FB do usuário que eu armazio em DB. Existe alguma maneira de postar na parede do usuário, mesmo que as sessões do FB sejam perdidas? Faz sentido armazenar o token de acesso do FB do usuário em banco de dados para postar no Wall mais tarde ou o token de acesso é relativamente curto?

Aqui está um exemplo de situação que pode acontecer no meu aplicativo: o usuário clica no botão FB, autoriza meu aplicativo, é redirecionado de volta para o meu site, onde eu criei automaticamente uma conta com base nos dados fornecidos pelo FB, também armazeno o ID do FB do usuário para poder assinar Neste usuário posteriormente. Agora ele navega no site, insere algumas informações e essa informação é postada em sua parede. Tudo está bem até agora porque o navegador do usuário segura o cookie criado pelo FB. Agora o usuário sai do site e contatos do site Admin. Admin abre seu próprio navegador, vai para a interface do administrador e publica algo em nome desse usuário. Agora, tendo o ID do FB desse usuário e assumindo que o usuário não revogou as permissões, ainda posso postar isso na parede dele?

Foi útil?

Solução

ATUALIZAR: Esta resposta não é mais válida, pois offline_access é descontinuado.

Você precisa solicitar a permissão offline_access. Verifica a permissões Doc.

EDITAR De acordo com a atualização e comentários - algumas informações sobre a remoção do offline_access podem ser encontradas aqui.

Outras dicas

Com o Facebook PHP SDK V3 (Veja no Github), é muito simples perguntar e usar um token de acesso offline do usuário. Aqui está como você faz isso.

Obtenha o token de acesso offline

Primeiro, você verifica se o usuário está conectado ou não:

require "facebook.php";
$facebook = new Facebook(array(
  'appId'  => YOUR_APP_ID,
  'secret' => YOUR_APP_SECRET,
));

$user = $facebook->getUser();

if ($user) {
  try {
    $user_profile = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    $user = null;
  }
}

Se ele não estiver, você gera o URL "Login com o Facebook" pedindo o offline_access permissão:

if (!$user) {
    $args['scope'] = 'offline_access';
    $loginUrl = $facebook->getLoginUrl($args);
}

E depois exiba o link em seu modelo:

<?php if (!$user): ?>
    <a href="<?php echo $loginUrl ?>">Login with Facebook</a>
<?php endif ?>

Então, quando o usuário estiver conectado, você pode recuperar o token de acesso offline e armazená -lo. Para obtê -lo, ligue:

if ($user) {
    $token = $facebook->getAccessToken();
    // store token
}

Use o token de acesso offline

Para usar o token de acesso offline quando o usuário não estiver conectado:

require "facebook.php";
$facebook = new Facebook(array(
  'appId'  => YOUR_APP_ID,
  'secret' => YOUR_APP_SECRET,
));

$facebook->setAccessToken("...");

E agora você pode fazer chamadas de API para este usuário:

$user_profile = $facebook->api('/me');

Espero que ajude !

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top