Question

Je construis une application web (PHP) qui utilise FB Connect. J'enregistre avec succès / Se connecter utilisateur à l'aide de la lib PHP fourni par facebook. Je peux aussi poster sur le mur, en utilisant ce code

        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']));                   
    }

Cependant, si je vais manuellement au gestionnaire de cookies de mon navigateur et de supprimer le cookie qui stocke session de FB, le code ne fonctionne pas. La seule chose que j'ai est l'ID FB de l'utilisateur que je stocke dans DB. Est-il possible de poster sur le mur de l'utilisateur, même si les sessions FB est perdu? Est-il logique de jeton d'accès de l'utilisateur FB stocker dans DB pour poster au plus tard le mur ou le jeton d'accès relativement de courte durée?

Voici un exemple de situation qui pourrait se produire dans mon application: utilisateur clique sur le bouton fb, autorise mon application, est redirigé vers mon site où je crée automatiquement un compte en fonction des données fournies par FB, je stocke également l'ID FB de l'utilisateur afin que je puisse se connecter cet utilisateur plus tard. Maintenant, il broute site, entre quelques infos et cette information est également postée à son mur. Tout va bien jusqu'à présent parce que le navigateur de l'utilisateur détient le cookie créé par FB. Maintenant, l'utilisateur quitte le site et les contacts administrateur du site. Admin ouvre son propre navigateur, va à l'interface d'administration et les messages quelque chose au nom de cet utilisateur. Maintenant, ayant que l'ID de l'utilisateur de FB et en supposant que l'utilisateur n'a pas révoqué les autorisations, je peux poster encore ce que son mur?

Était-ce utile?

La solution

UPDATE :. Cette réponse n'est plus valide que offline_access est dépréciée

Vous devez demander l'autorisation de offline_access. Vérifiez les autorisations de rel="nofollow">

EDIT Par la mise à jour et commentaires - quelques informations sur la suppression du offline_access peut trouver .

Autres conseils

Avec le SDK PHP Facebook v3 ( Voir github), il est assez simple de demander et utiliser un jeton d'accès utilisateur est offline. Voici comment vous le faites.

Obtenir le jeton d'accès hors ligne

D'abord, vous vérifier si l'utilisateur est connecté ou non:

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;
  }
}

S'il n'est pas, vous générez l'URL demandant l'autorisation de offline_access « Connexion avec Facebook »:

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

Et puis afficher le lien dans votre modèle:

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

Ensuite, lorsque l'utilisateur est connecté, vous pouvez récupérer l'accès hors ligne jeton et le stocker. Pour l'obtenir, composez le:

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

Utilisez le jeton d'accès hors ligne

Pour utiliser le jeton d'accès en mode hors connexion lorsque l'utilisateur n'est pas connecté:

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

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

Et vous pouvez maintenant faire des appels API pour cet utilisateur:

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

L'espoir qui aide!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top