2009-02-16 9 views
5

Je construis une application Facebook Connect qui fonctionne dans un gadget Google. Être un gadget signifie que l'application s'exécute dans un iframe. Dans l'application, il y a un formulaire qui permet aux utilisateurs enregistrés de poster des commentaires. La soumission est faite en utilisant AJAX, mais j'obtiens les mêmes résultats avec une forme normale. Le problème est que j'ai besoin d'obtenir l'identifiant facebook de l'utilisateur. Dans Firefox, il fonctionne très bien, mais sur Internet Explorer 7, je reçois l'erreur suivante:Application Facebook Connect à l'intérieur de iframe ne fonctionne pas dans IE7

'A session key is required for calling this method' 

Je crois que cela est dû à la façon dont IE gère les cookies tiers, parce que si je vais aux options Internet/Confidentialité/Avancé, et cocher Remplacer la gestion automatique des cookies et accepter tous les cookies, cela fonctionne très bien. Je ne peux pas passer l'identifiant Facebook du javascript, parce que n'importe qui pourrait l'altérer.

EDIT: Si j'ouvre directement le contenu de l'iframe, l'application fonctionne correctement. Le problème est vraiment dû au modèle de sécurité IFRAME et IE.

Qu'est-ce que je fais quelque chose de mal? Comment puis-je contourner ce problème?

+0

je frappe un problème similaire avec une application Facebook Connect qui fonctionne à l'intérieur d'un iframe superposé sur un site tiers , sauf que j'ai aussi le problème avec Safari et Firefox, si les utilisateurs ont choisi de ne pas accepter les cookies tiers. Avez-vous vu les mêmes problèmes ici, ou est-ce que je manque quelque chose? –

+0

Je n'ai pas essayé de bloquer les cookies tiers sur d'autres navigateurs, mais cela devrait causer les mêmes problèmes. Je suis allé pour la solution d'ouverture d'un popup. En fait, Facebook utilise maintenant un "faux" popup dans mon popup, au lieu d'ouvrir une autre fenêtre, ce qui est ok pour moi. –

Répondre

7

Avez-vous essayé d'ajouter une politique P3P?

Si la réponse du paramétrage du cookie a une politique compacte, IE utiliser pour déterminer si oui ou non pour permettre le cookie 3ème partie ..

+0

Salut, je ne savais pas à ce sujet. Je vais me renseigner. Merci beaucoup! –

1

J'ai trouvé une solution qui marche, même si c'est un peu moche: lorsque l'utilisateur clique sur le bouton 'login', il ouvre une fenêtre qui provient de mon propre site et qui contient le bouton de connexion Facebook Connect. Une fois l'utilisateur connecté, je ferme la fenêtre contextuelle et recharge l'iframe.

Ceci est vraiment moche, car il ouvre deux popups, mais au moins cela fonctionne. Je vais détecter si les cookies sont activés avec javascript et s'ils sont activés, je passerai la première popup.

Je suis toujours ouvert à de meilleures solutions ...


Modifier: Facebook utilise maintenant un pop-up « faux » dans mon pop-up, au lieu d'ouvrir une autre fenêtre. Maintenant, j'ai seulement un popup qui est ok pour moi.

3

J'ai résolu le même problème en modifiant la façon dont je vérifie si l'utilisateur était connecté sur la page PHP suite à une connexion FB connect. Donc, ils se connectent à FB Connect avec IE7. Les charges de pages suivantes et ultérieures où je dois vérifier qu'elles sont bien connectées à FaceBook J'ai utilisé le code suivant (notez que $ facebook-> require_login() et d'autres fonctions ne fonctionnaient pas - elles retournaient null uniquement dans 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();

L'ID d'utilisateur $ fb_utilisateur devrait maintenant avoir un ID utilisateur FaceBook valide.

En ce qui concerne la politique de confidentialité et facebook connecter + IE 7:

Bien que cela ne fonctionne pas pour moi, il semble travailler pour les autres.en HTAccess:

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

ou dans des fichiers PHP:

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

Référence: 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

dans votre code, vous utilisez "$ this-> userAPISessionKey", alors quel objet est référencé par "this" ?? merci: D –

Questions connexes