2010-04-22 28 views
5

Estoy usando la biblioteca PHP para Graph API (http://github.com/facebook/php-sdk) pero estoy un poco confundido acerca de cómo está funcionando (o no).Uso de las API Graph de Facebook Biblioteca PHP

Solo quiero autenticar al usuario y recuperar la ID de usuario. Lo que realmente quiero saber es qué hacer una vez que el usuario haya iniciado sesión en Facebook y haya regresado a mi sitio. Hay datos llamados 'sesión' en la URL. ¿Es necesario almacenar esto para obtener continuamente la identificación del usuario? Realmente no es aparente, para mí, de las muestras o (falta de) documentación.

Además, sería más fácil cortar la biblioteca de PHP por completo y simplemente manejar la respuesta yo misma, almacenarla en una variable de sesión. Si tuviera que hacer esto, ¿cuál es el mejor método para obtener/extraer la identificación de usuario actual?

Editar:

Actualmente, he copiado el archivo facebook.php y la ejemplo.php de archivos a través de GitHub, y sólo cambió el nombre de la aplicación y secreto en ejemplo.php. No está almacenando una cookie y está diciendo 'No estás conectado'. Sin embargo, cuando yo print_r($session); funciona (pero solo si la url contiene los datos de la sesión).

¿Alguien más ha tenido problemas como este? ¿Es posible que ejecutar en localhost esté causando esto?

Editar:

he subido exactamente los mismos dos archivos a un host y funcionó perfectamente. Almacenaba la cookie y mostraba toda la información que debería. Es muy probable que la ejecución en localhost esté causando los problemas. He cambiado la configuración en la pestaña Conectar en la aplicación de desarrollo de Facebook, pero aún no tuve suerte.

¿Alguien sabe cómo hacer esto desde localhost o qué estoy haciendo mal?

Respuesta

5

Hay datos llamados 'sesión' en la URL. ¿Es necesario almacenar esto para obtener continuamente la identificación del usuario?

Sí, necesita ser almacenado, pero la clase de Facebook lo analiza y almacena en una cookie para usted.


Además, sería más fácil simplemente cortar la librería PHP por completo y sólo manejan el Reponse mí mismo, almacenarlo en una variable de sesión.

La clase Facebook proporcionada en facebook.php no es necesario el uso de la API, pero proporciona algunas comodidades para que, como poner juntos URL comunes, analizar los datos de sesión (que se envía a la URL y después se almacena en una cookie), convirtiendo los mensajes de error (un objeto JSON con una clave de "error") en una excepción PHP, etc.

Así que, en resumen, no, no sería más fácil cortar la biblioteca PHP porque terminarías escribiendo básicamente las mismas cosas.

Como se puede ver en el ejemplo, que están recibiendo el identificador de usuario ($uid) llamando getUser:

if ($session) { 
    try { 
    $uid = $facebook->getUser(); 
    $me = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
    error_log($e); 
    } 
} 

$ uid es simplemente un entero, y $me son los datos para el usuario actual (que parece que no necesitas).Los mismos datos podrían ser recuperados llamando:

$me = $facebook->api('/' . $uid); //Generates https://graph.facebook.com/[uid] 

El problema que tengo en este momento con el ejemplo es que la función rizo dentro de la clase de Facebook (makeRequest método) es por alguna razón devolver contenido de NO. Por lo tanto, $me termina con nada, lo que hace que el ejemplo siga diciendo "No estás conectado". Pero, si fuera a producir $uid, vería que efectivamente contiene la identificación del usuario actual.

+0

tampoco la almacena en una cookie por sí mismo o ¿Necesito específicamente ejecuta una función para hacer esto? Configuré la cookie en verdadero al declarar la clase de Facebook, pero al inspeccionar las cookies en Firefox no parece haber almacenado nada. – j82374823749

+0

@ briggins5 Parece que lo hace cuando llamas a 'getSession'. – Nicole

+0

He llamado a $facebook->getLoginUrl() y getSession pero aún no se almacenan cookies, aparte de algunos en la categoría de Facebook, pero estos no aparecen relacionados específicamente, y probablemente no lo sean de todos modos. – j82374823749

0

¿Has consultado la última versión de facebook.php de github? La última versión tiene en cuenta las comillas mágicas y, por lo tanto, devolverá una sesión en lugar de una nula.

+0

Gracias Peter, sí, tengo esa versión. Tal vez actualizar de todos modos. Parece que solo la llamada CURL no devuelve nada (en absoluto). – Nicole

0

Una cosa que ayuda a verificar los encabezados de respuesta de Facebook a veces (rara vez) pueden ser informativos.

He encontrado que necesita hacer una llamada a/oauth/authorize (con parámetros de consulta) para autorizar el sitio web/aplicación, para que Facebook le dé un token de acceso.

+0

Parece que hay un problema cuando se usa localhost en lugar de un servidor de acceso público. Por lo que puedo decir, la biblioteca PHP maneja la autorización en sí misma, ya que de hecho produce la identificación del usuario, pero no produce una cookie. – j82374823749

1

función setCookieFromSession privada ($ session = null)

está fallando porque el parámetro $ dominio está vacía. Estoy usando esto para pruebas locales:

if ($domain != '') { 
    setcookie($cookieName, $value, $expires, '/', '.' . $domain); 
} else { 
    setcookie($cookieName, $value, $expires, '/'); 
} 
+0

Gracias por la respuesta. Esto resolvió el problema de trabajar en localhost. – j82374823749

+0

Entonces, ¿a qué debería ajustarse el valor de $ domain cuando trabajas en localhost? – BlueSilver

Cuestiones relacionadas