Exécution de l'application Facebook sur localhost

92

Je prévois de me connecter au chat Facebook depuis mon hôte local. J'aurai besoin d'obtenir la clé de session de Facebook. Lorsque je donne l'URL du site localhost:8080ou ip-address:8080cela ne fonctionne pas.

J'ai lu sur la configuration de deux applications avec 2 clés API différentes, l'une fonctionnant sur dev m / c et l'autre sur localhost, mais je ne l'ai pas tout à fait compris.

Quelqu'un peut-il expliquer comment exécuter une application Facebook sur localhost?

enthousiaste
la source
@Kavya Essayez-vous de créer une application de chat Facebook de bureau?
Searock
oui ... je veux frapper le serveur facebook de mon m / c ... vu un message concernant le même ici stackoverflow.com/questions/1877913/ ... je din l'obtenir ...
enthousiaste
@Kavya Si vous souhaitez en créer un, vous n'avez pas mentionné le langage de programmation que vous allez utiliser?
Searock
2
J'ai écrit un tutoriel à ce sujet.
ifaour
5
@xoxoxo Veuillez utiliser une ponctuation et une orthographe appropriées dans votre communication.
bart

Réponses:

77

J'ai écrit un tutoriel à ce sujet il y a quelque temps.

Le point le plus important est l '"URL du site":

URL du site: http: // localhost / app_name /

Où la structure des dossiers est quelque chose comme:

app_name
¦   index.php
¦
+---canvas
¦   ¦   index.php
¦   ¦
¦   +---css
¦           main.css
¦           reset.css
¦
+---src
        facebook.php
        fb_ca_chain_bundle.crt

EDIT:
Kavya : comment le serveur FB reconnaît-il mon hôte local même sans adresse IP ou port ??

Je ne pense pas que cela ait quoi que ce soit à voir avec Facebook, je suppose que puisque le srcparamètre iframe est chargé du côté client, il traitera votre URL locale comme si vous la mettiez directement sur votre navigateur.

Par exemple, ayez un fichier sur votre serveur en ligne avec du contenu (par exemple online.php):

<iframe src="http://localhost/test.php" width="100%" height="100%">
    <p>Not supported!</p>
</iframe>

Et sur votre répertoire racine localhost, ayez le fichier test.php:

<?php echo "Hello from Localhost!"; ?>

Maintenant, visitez, http://your_domain.com/online.phpvous verrez le contenu de votre fichier localhost!

C'est pourquoi les abonnements en temps réel et les rappels de désautorisation (pour le mentionner) ne fonctionneront pas avec les URL de l'hôte local! parce que Facebook va envoyer un ping (envoyer des requêtes http) à ces URL mais évidemment le serveur Facebook ne traduira pas ces URL vers les vôtres!

ifaour
la source
Je n'arrive pas à trouver l'URL du site, aucune idée où / ou quel onglet se trouve-t-il?
user962206
cela fonctionne-t-il pour le port 8080? Je reçois toujours l'erreur avec le site url: http://localhost:8080/auth/index.htmlet la page Web qui donne l'erreur est http://localhost:8080/auth/index.htmlet la ligne de channelurl est:channelUrl : '//localhost:8080/auth/channel.html',
nécromancien
Je ne comprends pas la partie «structure des dossiers». Si vous vous connectez simplement à votre site Web avec Facebook pour charger des commentaires Facebook sur votre page, avez-vous toujours besoin de cette structure de canevas?
AlxVallejo
Il existe des outils de tunneling qui vous permettront de donner à votre hôte local un nom public et de le rendre visible, afin que Facebook puisse renvoyer un ping. J'en ai créé un, nommé PageKite , il y en a d'autres aussi.
Bjarni Rúnar
29

si vous utilisez localhost:

dans Facebook -> Paramètres -> De base, dans le champ "Domaines d'application" écrivez "localhost", puis cliquez sur "+ Ajouter une plate-forme" choisissez "Site Web",

il créera deux champs "URL du site mobile" et "URL du site", dans "URL du site" réécrivez "localhost".

travaille pour moi.

user3531155
la source
merci, j'ai essayé les autres solutions mais finalement c'est celle qui a fonctionné,
rahulmishra
dans le champ URL du site j'avais: localhost , mais ne fonctionnait pas J'ai également ajouté localhost au champ App Domain comme vous l'avez mentionné, cela fonctionne très bien merci
RegarBoy
23

Vous pouvez également modifier le fichier «hosts» et créer une variante locale de votre domaine.

Exemple

Si votre véritable adresse d'application Facebook est "example.com", vous pouvez créer le domaine "localhost.example.com" (accessible uniquement depuis votre PC) dans votre fichier "hosts" pointant vers "localhost" et exécuter votre site Web local sous ce domaine. Vous pouvez tromper Facebook de cette façon.

Mateusz Charytoniuk
la source
1
fonctionne comme un charme, merci! FYI- hosts est situé sur Windows 7 à C:/Windows/System32/drivers/etc/hostsou sur Ubuntu à/etc/hosts
pztrick
Excellente méthodologie. Merci.
Jerad
Sur quoi dois-je définir les domaines d'application et l'URL du canevas?
Craig
Cependant, cela ne vous permettra pas de spécifier le port, vous devrez donc utiliser un proxy inverse pour permettre le développement sur le même domaine. Voir stackoverflow.com/questions/10729034/…
MagicLAMP
7

Dans les paramètres de base de votre application ( https://developers.facebook.com/apps ) sous Paramètres-> De base-> Sélectionnez comment votre application s'intègre à Facebook ...

Utilisez "URL du site:" et "URL du site mobile:" pour stocker vos URL de production et de développement. Les deux sites seront autorisés à s'authentifier. J'utilise simplement Facebook pour l'authentification, donc je n'ai besoin d'aucune des fonctionnalités de redirection de site mobile. Je change généralement le "URL du site mobile:" en mon site "localhost: 12345" pendant que je teste l'authentification, puis je le remets à la normale lorsque j'ai terminé.

Carter Medlin
la source
6

2013 août. Facebook ne permet pas de définir le domaine avec le port pour une application, par exemple "localhost: 3000".

Vous pouvez donc utiliser https://pagekite.net pour tunneliser votre localhost:portdomaine vers le bon domaine.

Les développeurs Rails peuvent utiliser gratuitement http://progrium.com/localtunnel/ .

  • Facebook n'autorise qu'un seul domaine pour l'application à la fois. Si vous essayez d'en ajouter un autre, en tant qu'hôte local, il affichera une sorte d'erreur différente sur le domaine. Veillez à n'utiliser qu'un seul domaine pour le rappel et pour le paramètre de domaine d'application à la fois.
Gediminas
la source
4

Alors j'ai fait fonctionner ça aujourd'hui. Mon URL est http://localhost:8888. Le domaine que j'ai donné à facebook est localhost. Je pensais que cela ne fonctionnait pas parce que j'essayais d'extraire des données en utilisant la FB.apiméthode. J'ai continué à obtenir un nom "indéfini" et une image sans source, donc je n'avais certainement pas accès au graphique.

Plus tard, j'ai réalisé que mon problème était vraiment que je ne faisais que passer un premier argument de /meà FB.api, et je n'avais pas de jeton. Vous devrez donc utiliser la FB.getLoginStatusfonction pour obtenir un jeton, qui devrait être ajouté à l' /meargument.

Lorenzo Mangubat
la source
2

spécifiez simplement votre URL de canevas comme http: // localhost / app_path .

JustCoding
la source
@ifaour j'ai suivi votre tutoriel .. il me donne une erreur Code d'erreur API: 191 Description d'erreur API: L'URL spécifiée n'appartient pas à l'application Message d'erreur: redirect_uri n'appartient pas à l'application. Je n'en ai pas besoin pour fonctionner à l'intérieur de fb ...
enthousiaste
@Kavya ajoute simplement l'URL du canevas en tant que localhost / app_path et ouvre l'application fb, de sorte qu'elle exécutera votre application à partir de localhost.Désolé pour tard, car très occupé.
JustCoding
Une autre façon de faire est de mapper l'URL de votre site / canevas localement, au lieu de spécifier localhost. Vous pouvez ensuite utiliser votre domaine cible. Je ne sais pas sur quelle architecture vous développez, mais sous Windows, vous y parviendrez en configurant votre site IIS localement avec les liaisons correctes, puis en ajoutant un alias à votre fichier d'hôtes dans C: \ Windows \ System32 \ drivers \ etc par exemple en ajoutant la ligne 127.0.0.1 yourproject.yourdomain.net
dumbledad
2

Ok, je ne suis pas sûr de ce qui se passe avec ces réponses, mais je vous ferai savoir ce qui a fonctionné pour moi, comme conseillé par un développeur senior à mon travail. Je travaille dans Ruby on Rails et j'utilise le code JavaScript de Facebook pour obtenir des jetons d'accès.

Problème: pour faire l'authentification, Facebook prend l'URL de votre barre d'adresse et la compare avec ce qu'ils ont dans le fichier. Ils ne vous permettent pas d'utiliser localhost:3000pour une raison quelconque. Cependant, vous pouvez utiliser un nom de domaine complètement inventé, comme yoursite.deven exécutant un serveur local et en pointant yoursite.devvers 127.0.0.1:3000ou à l'endroit où votre hôte local pointait.

Étape 1 : Installez ou mettez à jour Nginx

$ brew install nginx(installer) ou $ brew upgrade nginx(mettre à jour)

Étape 2 : Ouvrez votre fichier de configuration nginx

/usr/local/etc/nginx/nginx.conf (généralement ici)

/opt/boxen/config/nginx/nginx.conf(si vous utilisez Boxen)

Étape 3 Ajoutez ce bit de code dans votre http {}bloc

Remplacez proxy_passpar l'endroit où vous voulez pointer yoursite.dev. Dans mon cas, il remplaçait localhost: 3000 ou l'équivalent127.0.0.1:3000

server {
  listen       yoursite.dev:80;
  server_name  yoursite.dev;
  location / {
    proxy_pass http://127.0.0.1:3000;
  }
}

Étape 4 : Modifiez votre fichier d'hôtes /etc/hostssur Mac pour inclure

127.0.0.1   yoursite.dev

Ce fichier dirige les domaines vers localhost. Nginx écoute sur l'hôte local et redirige s'il correspond à une règle.

Étape 5 : Chaque fois que vous utilisez votre environnement de développement, vous utilisez le yoursite.devdans la barre d'adresse au lieu de localhost:3000Facebook vous connecte correctement.

Alex Levine
la source
1

Forward est un excellent outil pour aider au développement d'applications Facebook localement, il prend en charge SSL, donc le cert n'est pas un problème.

https://forwardhq.com/in-use/facebook

AVERTISSEMENT: je suis l'un des développeurs

blasé
la source
1
Et PageKite est l'un des concurrents de Forward (je l'ai fait!). ;-)
Bjarni Rúnar
Après avoir essayé tout le reste sous le soleil, cela a fonctionné pour moi. Le seul problème est que tout ce transfert est vraiment lent. Mieux que de ne pas recevoir de rappels FB! Merci
Craig
0

Vous devez configurer votre application pour qu'elle s'exécute sur https pour localhost

Vous pouvez suivre les étapes ci-dessous pour configurer HTTPS sur ubuntu

https://www.digitalocean.com/community/articles/how-to-create-a-ssl-certificate-on-apache-for-ubuntu-12-04

Vous devez suivre les étapes suivantes:

installez apache (si vous ne l'avez pas)

sudo apt-get install apache2

Première étape: activer le module SSL

sudo a2enmod ssl
sudo service apache2 restart

Deuxième étape: créer un nouveau répertoire

sudo mkdir /etc/apache2/ssl

Troisième étape: créer un certificat SSL auto-signé

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache/ssl/apache.key -out /etc/apache2/ssl/apache.crt

Avec cette commande, nous créerons à la fois le certificat SSL auto-signé et la clé de serveur qui le protège, et les placerons tous les deux dans le nouveau répertoire. La ligne la plus importante est "Nom commun". Entrez votre nom de domaine officiel ici ou, si vous n'en avez pas encore, l'adresse IP de votre site.

Nom commun (par exemple, nom de domaine complet du serveur ou VOTRE nom) []: exemple.com ou localhost

Étape 4: configuration du certificat

sudo vim /etc/apache2/sites-available/default-ssl

Trouvez les lignes suivantes et modifiez-les avec vos paramètres

ServerName localhost ou example.com

SSLEngine sur SSLCertificateFile /etc/apache2/ssl/apache.crt

SSLCertificateKeyFile /etc/apache2/ssl/apache.key

Cinquième étape: activer le nouvel hôte virtuel

sudo a2ensite default-ssl
sudo service apache2 reload
waqas
la source
0

Un truc:

Utilisez MAMPPRO et créez: nom du serveur: l'adresse EXACTE de votre site Web (ex: helloworld.com) à votre site sur votre disque

Sur Facebook: vous pouvez ainsi conserver l'URL de votre site d'origine (par exemple: helloworld.com)

Vous comprenez maintenant que lorsque vous tapez votre site Web sur la barre d'adresse, vous êtes en local ! ..et lorsque vous souhaitez être en ligne, désactivez simplement le serveur sur MAMP PRO ..

:)

Sébastien Horin
la source
0

Aucune des réponses ci-dessus n'a fonctionné pour moi. J'utilise FB API 2.5. Le mien était une combinaison de problèmes qui mènent au succès une fois résolus

  1. Créez une application de test pour vous assurer qu'elle est maintenue et gérée en tant que telle et qu'elle peut être désactivée lors de sa mise en ligne
  2. Lisez correctement le message d'erreur :) - J'ai dû activer "Connexion Web OAuth" AVEC "Connexion client OAuth"
  3. Utilisez https://www.whatismyip.com/ pour découvrir quelle est mon adresse IP actuelle
  4. Créer un enregistrement A sur mon domaine ie http://localhost.mydomain.com qui pointe vers mon IP actuelle

Ce n'est probablement pas idéal car le changement d'IP dynamique et on pourrait probablement utiliser DynDNS ou quelque chose de similaire pour rendre l'IP plus "statique" mais cela a fonctionné pour moi

Cornelius Parkin
la source
0

Dans mon cas, le problème s'est révélé être le blocage par Chrome de la requête CORS de localhost: 4200 vers le site Web de l'API Facebook. Exécuter Chrome avec ce paramètre: "YOUR_PATH_TO_CHROME \ Google \ Chrome \ Application \ chrome.exe" --disable-web-security --user-data-dir = "c: / chrome a fonctionné comme un charme lors du développement. Même sans hôte local ajouté aux paramètres de l'application facebook.

nomadev
la source
fonctionne bien pour le développement local, mais en production, vous avez besoin de la permission de Facebook (qui est obtenue par l'appel d'option du navigateur) pour partager les données de Facebook
radio_head