2010-11-15 5 views
1

Je crée une application iFrame pour Facebook en utilisant le Facebook C# SDK. Je l'ai que l'utilisateur s'authentifie et je peux obtenir leur nom d'utilisateur en utilisant l'API graphique (FaceBookApp.Api ("/ userid"))Facebook C# SDK, AJAX dans l'application iFrame

Mon problème maintenant est que quand je fais un appel AJAX à une page je ne peux pas utiliser plus longtemps l'Api. L'ID utilisateur est 0. Lors de l'ouverture de FireBug, la réponse à la demande est "Non pris en charge get request". Je suppose que cela a quelque chose à voir avec le visage que la requête AJAX utilise une session différente pour l'appel et cette session n'est pas authentifiée. Je me demandais s'il y avait un moyen de contourner cela? Je savais que je pourrais rendre la page que je demande à ré-authentifier, mais cela signifierait que je devrais reauth pour chaque demande qui ne semble pas efficace. J'utilise Jquery pour faire la demande.

Toute aide est très appréciée.

Merci

Répondre

2

La question est que, avec un appel ajax dans un iframe, vous devez envoyer les informations de session pour le client au serveur. Sinon, FacebookApp n'a aucun moyen de savoir qui est l'utilisateur actuel. Vous pouvez résoudre cela de deux façons.

  1. Vous pouvez envoyer la valeur entière de signed_request au serveur.
  2. Vous pouvez utiliser le SDK Javascript pour obtenir le jeton d'accès des utilisateurs et envoyer uniquement cette valeur au serveur.

Je pense que la première est la meilleure. Tout ce que vous devez faire est de changer votre ajax URL pour inclure la demande signée comme ceci:

var ajaxUrl = '/ services/exemple signed_request = <% = Request.QueryString [ "signed_request"]%>';

Ensuite, faites simplement votre appel comme d'habitude avec la nouvelle URL. Après cela, la classe FacebookApp lira la session à partir de la requête ajax et vous serez prêt à partir.

+0

c'est QueryString (en haut de la 's'). – Martin

+1

Nathans réponse pourrait être obsolète, je réalise. Dans mon cas, le tableau QueryString était vide. J'ai utilisé Request.Form à la place. Sinon, tout s'est bien passé. No CanvasAuthorize sur l'action. – Martin