2009-02-16 14 views
5

Estoy construyendo una aplicación Facebook Connect que se ejecuta dentro de un gadget de Google. Ser un gadget significa que la aplicación se ejecuta dentro de un iframe. Dentro de la aplicación, hay un formulario que permite a los usuarios registrados publicar comentarios. La presentación se realiza utilizando AJAX, pero obtengo los mismos resultados con una forma normal. El problema es que necesito obtener la identificación de Facebook del usuario. En Firefox, funciona bien, pero en Internet Explorer 7, me sale el siguiente error:Aplicación Facebook Connect dentro de iframe que no funciona en IE7

'A session key is required for calling this method' 

creo que esto es debido a la forma en que IE maneja las cookies de terceros, porque si voy a las opciones de Internet/Privacidad/Avanzado, y marque Anular el manejo automático de cookies y aceptar todas las cookies, funciona bien. No puedo pasar la identificación de Facebook del javascript, porque cualquiera podría manipularlo.

EDITAR: Si abro el contenido del iframe directamente, la aplicación funciona bien. El problema se debe realmente al modelo de seguridad IFRAME e IE.

¿Qué estoy haciendo algo mal? ¿Cómo puedo solucionar este problema?

+0

estoy golpeando un problema similar con una aplicación de Facebook Connect que se ejecuta dentro de un iframe superpuesto sobre un sitio de terceros , excepto que también estoy teniendo el problema con Safari y Firefox, si los usuarios han optado por no aceptar cookies de terceros. ¿Viste los mismos problemas allí o me falta algo? –

+0

No intenté bloquear cookies de terceros en otros navegadores, pero eso debería causar los mismos problemas. Fui por la solución de abrir una ventana emergente. De hecho, Facebook ahora usa una ventana emergente "falsa" dentro de mi ventana emergente, en lugar de abrir otra ventana, lo cual está bien para mí. –

Respuesta

7

¿Has intentado agregar una política de P3P?

Si la configuración de la cookie de respuesta tiene una política compacta, IE usar esto para determinar si se permite o no la tercera cookie de origen ..

+0

Hola, no sabía de eso. Yo investigaré. ¡Muchas gracias! –

1

Encontré una solución temporal que funciona, aunque es un poco fea: cuando el usuario hace clic en el botón 'iniciar sesión', abre una ventana emergente que proviene de mi propio sitio y que contiene el botón de inicio de sesión de Facebook Connect. Después de que el usuario inicia sesión, cierro la ventana emergente y vuelvo a cargar el iframe.

Esto es realmente feo porque abre dos ventanas emergentes, pero al menos funciona. Detectaré si las cookies están habilitadas usando JavaScript y si están habilitadas, omitiré la primera ventana emergente.

Todavía estoy abierto a mejores soluciones ...


Editar: Facebook ahora utiliza una ventana emergente "falso" dentro de mi ventana emergente, en lugar de abrir otra ventana. Ahora solo tengo una ventana emergente que está bien para mí.

3

He resuelto el mismo problema modificando la forma puedo comprobar si el usuario era inició sesión en la página PHP después de un inicio de sesión con conexión FB.

Por lo tanto, inician sesión en FB Connect con IE7. Cargas de la página siguiente y subsiguientes en las que necesito verificar que efectivamente están conectadas a FaceBook. Utilicé el siguiente código (tenga en cuenta que $ facebook-> require_login() y otras funciones no funcionaron - devolvieron null solo en IE 7):

// Validate from Facebook that session is valid and user is logged in. require_once 'facebook/facebook.php'; $facebook = new Facebook(YourAppsAPIKeyPublic, YourAppsAPIKeySecret); $facebook->api_client->session_key = $this->userAPISessionKey; $fb_user_id = $facebook->api_client->users_getLoggedInUser();

El $ fb_user_id ahora debería tener un ID de usuario de FaceBook válido.

En cuanto a la política de privacidad y Facebook Connect + IE 7:

Aunque esto no funcionó para mí parece que funciona para otros.en HTAccess:

Header append P3P "CP=\"HONK\""

o en archivos PHP:

header('P3P: CP="CAO PSA OUR"'); o header('P3P: CP="HONK"');

referencia: http://forum.developers.facebook.com/viewtopic.php?id=28636

ASP.NET:

protected void Application_BeginRequest(Object sender, EventArgs e) 
{ 
    HttpContext.Current.Response.AddHeader("p3p", "CP=\"CAO PSA OUR\""); 
} 
+0

en su código, usa "$ this-> userAPISessionKey", ¿a qué objeto hace referencia "this" ?? gracias: D –