2010-07-14 19 views
17

estoy migrando mi viejo FB aplicación a la nueva API gráfico usando el PHP APICómo comprobar si el usuario está conectado con el nuevo facebook php api

Tengo dos páginas: las públicas (que no requieren la conexión del usuario) y los privados (que hacer)

Así que el código de cada página php en mi aplicación funciona de la siguiente manera:

if (this_page_requires_user_login){ 
     $facebook = new Facebook(...) ; 
     $session = $facebook->getSession ; 
     if (!$session){ 
       $url =$facebook.getLoginUrl(array(next => current_page); 
       echo "<fb:redirect url=$url/>" ; 

} 
// the rest of the code continues here 

Ahora bien, como se puede ver, esta forma de trabajo hacia delante cada página a la URL de inicio de sesión y mientras funciona, también es lento y agrega el & session = {bla} cadena a url muy simple.

Necesito una forma de verificar donde un usuario ya está conectado antes de redirigirlo a la página de inicio de sesión. Pero no puedo encontrar dicho método en php api. ¿Cuál es la mejor manera de hacer esto?

EDITAR

Esto parecía hacer el truco

if ($session) { 
    try { 
    $me = $facebook->api('/me'); 
    if ($me) { 
     // here comes your code for user who is logged in 
    } 
    } catch (FacebookApiException $e) { 
    login() 
    } 
}else{ 
login() 
} 

function login(){ 

    $url =$facebook.getLoginUrl(array(next => current_page); 


     echo "<fb:redirect url=$url/>" ; 
} 

Respuesta

19

Si estoy leyendo el código correctamente, sólo si no hay ninguna sesión se devuelve haces la redirección? De acuerdo con los comentarios en Facebook's example, incluso si obtiene una sesión de vuelta, no puede asumir que todavía es válida. Solo probando una llamada API que requiere un usuario conectado, lo sabrá con certeza. Esta es la mejor manera que he visto para determinar de manera confiable el estado de inicio/cierre de sesión.

if ($session) { 
    try { 
    $me = $facebook->api('/me'); 
    if ($me) { 
     //User is logged in 
    } 
    } catch (FacebookApiException $e) { 
    //User is not logged in 
    } 
} 
+3

Si ha almacenado el token de acceso y lo está utilizando, esto no funciona, debido a que la llamada a la API todavía funciona sin lanzar una excepción, pero luego cuando se les redirige a la getLogoutUrl por ejemplo, sólo se envía a la página de inicio de Facebook, en lugar de enviarlo a su sitio web – andrewtweber

+0

@andrewtweber exactamente. Gracias. –

+0

Debes descifrar la url anteriormente, por eso no redirigir:

Cuestiones relacionadas