Uruchomienie aplikacji Facebook na hoście lokalnym

92

Planuję połączyć się z czatem na Facebooku z mojego lokalnego hosta. Będę potrzebował klucza sesji z Facebooka. Kiedy podam adres URL witryny jako localhost:8080lub ip-address:8080nie działa.

Czytałem o konfigurowaniu dwóch aplikacji z 2 różnymi kluczami API, jeden działa na dev m / c, a drugi na localhost, ale nie do końca to rozumiem.

Czy ktoś może wyjaśnić, jak uruchomić aplikację Facebook na hoście lokalnym?

entuzjastyczny
źródło
@Kavya Czy próbujesz stworzyć aplikację do czatu na Facebooku?
Searock
tak ... chcę trafić na serwer facebook z mojego m / c ... zobaczyłem post dotyczący tego samego tutaj stackoverflow.com/questions/1877913/ ... nie rozumiem ...
entuzjastycznie
@Kavya Jeśli chcesz je stworzyć, nie wspomniałeś o języku programowania, którego będziesz używać?
Searock
2
Napisałem o tym poradnik .
ifaour
5
@xoxoxo W komunikacji należy używać właściwej interpunkcji i pisowni.
bart

Odpowiedzi:

77

Jakiś czas temu napisałem o tym poradnik .

Najważniejszym punktem jest „URL witryny”:

URL witryny: http: // localhost / nazwa_aplikacji /

Gdzie struktura folderów jest podobna do:

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

EDYCJA:
Kavya : w jaki sposób serwer FB rozpoznaje mojego lokalnego hosta nawet bez adresu IP lub portu?

Nie sądzę, że ma to coś wspólnego z Facebookiem, myślę, że ponieważ srcparametr iframe jest ładowany po stronie klienta, będzie traktował lokalny adres URL tak, jakbyś umieścił go bezpośrednio w przeglądarce.

Na przykład miej plik na swoim serwerze online z zawartością (np. online.php):

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

A w katalogu głównym hosta lokalnego umieść plik test.php:

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

Teraz odwiedź http://your_domain.com/online.php, zobaczysz zawartość pliku localhost!

Dlatego subskrypcje w czasie rzeczywistym i cofanie autoryzacji wywołań zwrotnych (żeby wspomnieć) nie będą działać z adresami URL lokalnego hosta! ponieważ Facebook będzie pingował (wysyła żądania http) do tych adresów URL, ale oczywiście serwer Facebooka nie przetłumaczy tych adresów URL na twoje!

ifaour
źródło
Nie mogę znaleźć „adresu URL witryny” ani pojęcia, gdzie / lub na jakiej karcie się znajduje?
user962206
czy to działa dla portu 8080? Nadal otrzymuję błąd z adresem URL witryny: http://localhost:8080/auth/index.htmla strona, która wyświetla błąd, to, http://localhost:8080/auth/index.htmla wiersz channelurl to:channelUrl : '//localhost:8080/auth/channel.html',
nekromanci
Nie rozumiem części dotyczącej „struktury folderów”. Jeśli po prostu logujesz się do swojej witryny za pomocą Facebooka, aby załadować komentarze Facebooka na swojej stronie, czy nadal potrzebujesz tej struktury kanwy?
AlxVallejo
Istnieje kilka narzędzi do tunelowania, które pozwolą ci nadać twojemu lokalnemu hostowi publiczną nazwę i sprawić, że będzie on widoczny, aby Facebook mógł z powrotem pingować. Stworzyłem jeden o nazwie PageKite , są też inne.
Bjarni Rúnar
29

jeśli używasz localhost:

w Facebook -> Ustawienia -> Podstawowe, w polu „Domeny aplikacji” wpisz „localhost”, a następnie kliknij „+ Dodaj platformę” wybierz „Witryna internetowa”,

utworzy dwa pola „URL witryny mobilnej” i „URL witryny”, w polu „URL witryny” wpisz ponownie „localhost”.

pracuje dla mnie.

user3531155
źródło
dzięki, próbowałem innych rozwiązań, ale w końcu to zadziałało,
rahulmishra
w polu adresu URL witryny miałem: localhost , ale nie działało Dodałem również localhost do pola domeny aplikacji, jak wspomniałeś, to działa dobrze, dzięki
RegarBoy
23

Możesz także edytować plik „hosts” i tworzyć lokalną odmianę swojej domeny.

Przykład

Jeśli Twój prawdziwy adres aplikacji Facebook to „example.com”, możesz utworzyć domenę „localhost.example.com” (dostępną tylko z Twojego komputera) w pliku „hosts” wskazującą na „localhost” i uruchomić lokalną witrynę internetową w tej domenie. W ten sposób możesz oszukać Facebooka.

Mateusz Charytoniuk
źródło
1
działa jak urok, dzięki! Do Twojej wiadomości - hosty znajdują się w C:/Windows/System32/drivers/etc/hostssystemie Windows 7 w systemie Ubuntu lub w systemie Ubuntu pod adresem/etc/hosts
pztrick
Doskonała metodologia. Dzięki.
Jerad
Na co mam ustawić URL domen aplikacji i kanwy?
Craig,
Nie pozwoli to jednak na określenie portu, więc będziesz musiał użyć odwrotnego proxy, aby umożliwić programowanie w tej samej domenie. Zobacz stackoverflow.com/questions/10729034/…
MagicLAMP,
7

W podstawowych ustawieniach aplikacji ( https://developers.facebook.com/apps ) w obszarze Ustawienia-> Podstawowe-> Wybierz sposób integracji aplikacji z Facebookiem ...

Użyj opcji „URL witryny” i „URL witryny mobilnej:” do przechowywania produkcyjnych i programistycznych adresów URL. Obie witryny będą mogły uwierzytelniać się. Używam tylko Facebooka do uwierzytelniania, więc nie potrzebuję żadnych funkcji przekierowywania witryn mobilnych. Zwykle zmieniam adres „Mobile Site URL:” na moją witrynę „localhost: 12345” podczas testowania uwierzytelniania, a po zakończeniu ustawiam go z powrotem na normalny.

Carter Medlin
źródło
6

2013 sierpień. Facebook nie zezwala na ustawienie domeny z portem dla aplikacji, na przykład „localhost: 3000”.

Możesz więc użyć https://pagekite.net do tunelowania swojej localhost:portdomeny do właściwej domeny.

Programiści Rails mogą korzystać z http://progrium.com/localtunnel/ za darmo.

  • Facebook dopuszcza w danym momencie tylko jedną domenę dla aplikacji. Jeśli próbujesz dodać kolejny, jako localhost, wyświetli się jakiś inny błąd dotyczący domeny. Pamiętaj, aby używać tylko jednej domeny do wywołania zwrotnego i ustawienia domeny aplikacji w danym momencie.
Gediminas
źródło
4

Więc dzisiaj to zadziałało. Mój adres URL to http://localhost:8888. Domena, którą podałem Facebookowi, to localhost. Myślałem, że to nie działa, ponieważ próbowałem pobrać dane za pomocą tej FB.apimetody. Ciągle otrzymywałem „niezdefiniowaną” nazwę i obraz bez źródła, więc zdecydowanie nie miałem dostępu do wykresu.

Później zdałem sobie sprawę, że mój problem polegał na tym, że przekazałem tylko pierwszy argument /medo FB.api, a nie miałem tokena. Musisz więc użyć FB.getLoginStatusfunkcji, aby uzyskać token, który należy dodać do /meargumentu.

Lorenzo Mangubat
źródło
2

po prostu określ adres URL kanwy jako http: // localhost / ścieżka_aplikacji .

JustCoding
źródło
@ifaour i podążałem za naszym samouczkiem .. jego błąd API Kod błędu: 191 Opis błędu API: Podany adres URL nie jest własnością aplikacji Komunikat o błędzie: redirect_uri nie należy do aplikacji. Nie potrzebuję go do działania na fb ...
entuzjastycznie
@Kavya po prostu dodaj adres URL kanwy jako localhost / app_path i otwórz aplikację fb, aby uruchomiła Twoją aplikację z lokalnego hosta. Przepraszam za późno, ponieważ jest bardzo zajęty.
JustCoding,
Innym sposobem na to jest lokalne mapowanie adresu URL witryny / obszaru roboczego, zamiast określania lokalnego hosta. Możesz wtedy użyć domeny docelowej. Nie jestem pewien, na jakiej architekturze pracujesz, ale w systemie Windows można to osiągnąć, konfigurując lokalnie witrynę IIS z odpowiednimi powiązaniami, a następnie dodając alias do pliku hosts w C: \ Windows \ System32 \ drivers \ etc np. dodanie linii 127.0.0.1 yourproject.yourdomain.net
dumbledad
2

Ok, nie jestem pewien, o co chodzi z tymi odpowiedziami, ale dam ci znać, co zadziałało, zgodnie z zaleceniami mojego starszego programisty. Pracuję w Ruby on Rails i używam kodu JavaScript Facebooka, aby uzyskać tokeny dostępu.

Problem: Aby przeprowadzić uwierzytelnianie, Facebook pobiera adres URL z paska adresu i porównuje go z tym, co ma w pliku. Nie pozwalają ci używać localhost:3000z jakiegokolwiek powodu. Możesz jednak użyć całkowicie wymyślonej nazwy domeny, na przykład yoursite.devuruchamiając lokalny serwer i wskazując yoursite.devna 127.0.0.1:3000lub gdziekolwiek wskazywał twój lokalny host.

Krok 1 : Zainstaluj lub zaktualizuj Nginx

$ brew install nginx(zainstaluj) lub $ brew upgrade nginx(zaktualizuj)

Krok 2 : Otwórz plik konfiguracyjny nginx

/usr/local/etc/nginx/nginx.conf (zwykle tutaj)

/opt/boxen/config/nginx/nginx.conf(jeśli używasz Boxen)

Krok 3 Dodaj ten fragment kodu do swojego http {}bloku

Zamień na proxy_passgdziekolwiek chcesz wskazać yoursite.dev. W moim przypadku była to zamiana localhost: 3000 lub odpowiednik127.0.0.1:3000

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

Krok 4 : Edytuj plik hosts /etc/hostsna komputerze Mac, aby dołączyć

127.0.0.1   yoursite.dev

Ten plik kieruje domeny do localhost. Nginx nasłuchuje na hoście lokalnym i przekierowuje, jeśli pasuje do reguły.

Krok 5 : Za każdym razem, gdy korzystasz ze środowiska deweloperskiego, używasz yoursite.devw pasku adresu zamiast, localhost:3000aby Facebook logował Cię poprawnie.

Alex Levine
źródło
1

Forward to świetne narzędzie pomagające w lokalnym rozwoju aplikacji Facebooka, obsługuje SSL, więc pewna rzecz nie stanowi problemu.

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

ZRZECZENIE SIĘ: Jestem jednym z deweloperów

wrzasnął
źródło
1
A PageKite jest jednym z konkurentów Forward (udało mi się!). ;-)
Bjarni Rúnar 26.07.13
Po wypróbowaniu wszystkiego innego pod słońcem, to zadziałało. Jedynym problemem jest to, że całe to przekazywanie jest naprawdę powolne. Lepiej jednak niż nie otrzymywać oddzwonień na FB! Dzięki
Craig
0

Musisz skonfigurować swoją aplikację tak, aby działała przez https dla localhost

Możesz wykonać kroki podane w tym, aby skonfigurować HTTPS na Ubuntu

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

Musisz wykonać następujące czynności:

zainstaluj apache (jeśli nie masz)

sudo apt-get install apache2

Krok pierwszy - aktywuj moduł SSL

sudo a2enmod ssl
sudo service apache2 restart

Krok drugi - utwórz nowy katalog

sudo mkdir /etc/apache2/ssl

Krok trzeci - utwórz certyfikat SSL z podpisem własnym

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

Za pomocą tego polecenia utworzymy samopodpisany certyfikat SSL i klucz serwera, który go chroni, i umieścimy oba z nich w nowym katalogu. Najważniejszym wierszem jest „Common Name”. Wpisz tutaj swoją oficjalną nazwę domeny lub, jeśli jeszcze jej nie masz, adres IP swojej witryny.

Nazwa pospolita (np. FQDN serwera lub TWOJA nazwa) []: example.com lub localhost

Krok czwarty - Skonfiguruj certyfikat

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

Znajdź następujące wiersze i edytuj je za pomocą swoich ustawień

Nazwa_serwera localhost lub example.com

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

SSLCertificateKeyFile /etc/apache2/ssl/apache.key

Krok piąty - aktywuj nowy wirtualny host

sudo a2ensite default-ssl
sudo service apache2 reload
waqas
źródło
0

Sztuczka:

Skorzystaj z MAMPPRO i utwórz: nazwa serwera: DOKŁADNY adres Twojej witryny (np .: helloworld.com) do Twojej witryny na dysku

Na Facebooku: możesz więc zachować oryginalny adres URL witryny (np. Helloworld.com)

Teraz rozumiesz, że kiedy wpisujesz swoją witrynę na pasku adresu, jesteś lokalnie ! .. a kiedy chcesz być online, po prostu wyłącz serwer na MAMP PRO ..

:)

Sebastien Horin
źródło
0

Żadna z powyższych odpowiedzi nie zadziałała dla mnie. Korzystam z FB API 2.5. Moja była kombinacją problemów, które po rozwiązaniu doprowadziły do ​​sukcesu

  1. Utwórz aplikację testową, aby upewnić się, że jest ona utrzymywana i zarządzana jako taka oraz że można ją wyłączyć podczas uruchamiania
  2. Przeczytaj poprawnie komunikat o błędzie :) - Musiałem włączyć „Logowanie OAuth przez sieć” Z „Logowanie klienta OAuth”
  3. Użyj https://www.whatismyip.com/, aby dowiedzieć się, jakie jest moje obecne IP
  4. Utwórz rekord A w mojej domenie, tj. Http://localhost.mydomain.com, który będzie wskazywał na mój obecny adres IP

Prawdopodobnie nie jest to idealne rozwiązanie jako zmiana dynamicznego adresu IP i prawdopodobnie można by użyć DynDNS lub czegoś podobnego, aby uczynić adres IP bardziej „statycznym”, ale zadziałało to dla mnie

Cornelius Parkin
źródło
0

W moim przypadku problemem okazało się blokowanie przez chrome żądania CORS z localhost: 4200 do strony facebook api. Uruchamianie Chrome z tym ustawieniem: „YOUR_PATH_TO_CHROME \ Google \ Chrome \ Application \ chrome.exe” --disable-web-security --user-data-dir = "c: / chrome działało jak urok podczas programowania. Nawet bez lokalnego hosta dodano do ustawień aplikacji na Facebooku.

nomadev
źródło
działa dobrze dla lokalnego rozwoju, ale w produkcji potrzebujesz zgody Facebooka (którą uzyskuje się przez wywołanie opcji przeglądarki), aby udostępniać dane z Facebooka
radio_head