Posso armazenar token de acesso ao Facebook e usá -lo mais tarde?
-
25-09-2019 - |
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?
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 !