Pregunta

Estoy construyendo una aplicación web (PHP) que utiliza FB Connect. Me registro con éxito / signo de usuario con la ayuda de la lib PHP proporcionada por facebook. También me pueden enviar a la pared, utilizando el 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']));                   
    }

Sin embargo, si voy manualmente a administrador de cookies de mi navegador y borrar la cookie que almacena sesión de FB, el código no funciona. Lo único que tengo es de FB de usuario de ID que almaceno en el PP. ¿Hay alguna manera de publicar en el muro de usuario, incluso si se pierde sesiones FB? ¿Tiene sentido para el acceso FB tienda de token de usuario en el PP para colocar en la pared posterior o el token de acceso relativamente corta vida?

Aquí hay una situación de ejemplo que podría suceder en mi aplicación: botón usuario hace clic en fb, autoriza mi aplicación, se le redirecciona de nuevo a mi sitio donde se crea automáticamente una cuenta en base a datos proporcionados por FB, también del usuario del almacén I FB ID para que pudiera acceder a este usuario para más tarde. Ahora navega sitio, entra algo de información y esta información se ha publicado en su muro. Todo está bien hasta ahora porque el navegador del usuario mantiene la cookie creado por FB. Ahora el usuario deja el sitio y sitio de administración de contactos. Administrador abre su propio navegador, va a la interfaz y los mensajes de administración algo en nombre de este usuario. Ahora, teniendo de ese usuario FB ID y asumiendo que el usuario no ha revocado los permisos, puede todavía publicar esto en su pared?

¿Fue útil?

Solución

Actualizar . Esta respuesta ya no es válida como offline_access está en desuso

Se necesita solicitar el permiso offline_access. Compruebe el permisos doc.

Editar por la actualización y comentarios - algo de información sobre la eliminación de la offline_access se puede encontrar aquí .

Otros consejos

Con la versión 3 del SDK de Facebook PHP ( ver en github ), es bastante simple para preguntar y utilizar un acceso de usuarios en línea token. Así es cómo se hace eso.

Obtener el token de acceso fuera de línea

En primer lugar, comprobar si el usuario está conectado o no:

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

Si no lo es, se genera la URL "Entrar con Facebook" pidiendo permiso offline_access:

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

Y a continuación, mostrar el enlace en su plantilla:

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

A continuación, cuando el usuario está conectado, puede recuperar el token de acceso fuera de línea y almacenarla. Para conseguirlo, llamada:

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

Uso del token de acceso fuera de línea

Para usar el token de acceso fuera de línea cuando el usuario no se registra en:

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

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

Y ahora usted puede hacer llamadas a la API para este usuario:

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

Espero que ayude!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top