2010-04-22 18 views
5

Używam biblioteki PHP dla Graph API (http://github.com/facebook/php-sdk), ale jestem nieco zdezorientowany tym, jak to wszystko działa (lub nie).Korzystanie z interfejsu API Graph Graph API Biblioteka PHP

Po prostu chcę uwierzytelnić użytkownika i odzyskać ID użytkownika. To, co naprawdę chcę wiedzieć, to co zrobić, gdy użytkownik zaloguje się na Facebooku i powróci na moją stronę. W adresie URL znajdują się dane o nazwie "sesja". Czy należy to zapisać, aby stale otrzymywać identyfikator użytkownika? To naprawdę nie jest dla mnie oczywiste z próbek lub (braku) dokumentacji.

Poza tym byłoby łatwiej po prostu wyciąć bibliotekę PHP i po prostu obsłużyć odpowiedź, zachowując ją w zmiennej sesji. Jeśli miałbym to zrobić, jaka jest najlepsza metoda pobierania/wyodrębniania bieżącego identyfikatora użytkownika?

Edit:

Obecnie mam skopiowany plik facebook.php i example.php złożyć w ciągu od GitHub, a tylko zmienił nazwę aplikacji i tajemnicy w example.php. Nie zapisuje pliku cookie i mówi "Nie jesteś połączony". Jednak, gdy I print_r($session); działa (ale tylko jeśli adres URL zawiera dane sesji).

Czy ktoś jeszcze miał takie problemy? Czy to możliwe, że powoduje to uruchomienie na localhost?

Edit:

upload dokładnie te same dwa pliki do hosta i to działało idealnie. Przechowywał plik cookie i wyświetlał wszystkie informacje, które powinien. Najprawdopodobniej przyczyną problemów jest uruchomienie na localhost. Zmieniłem ustawienia pod zakładką Connect aplikacji dewelopera Facebooka, ale wciąż nie ma szczęścia.

Ktoś wie, jak to zrobić z localhost lub co robię źle?

Odpowiedz

5

W adresie URL znajdują się dane o nazwie "sesja". Czy należy to zapisać, aby stale otrzymywać identyfikator użytkownika?

Tak, musi być przechowywany, ale klasa Facebook analizuje je i przechowuje w pliku cookie.


Ponadto, byłoby łatwiej po prostu wyciąć z biblioteki PHP całkowicie i po prostu będzie obsługiwać réponse siebie, zapisując go w zmiennej sesji.

Klasa Facebook przewidziane w facebook.php nie jest niezbędne do korzystania z API, ale oferuje kilka dogodnym dla Ciebie, takie jak łącząc wspólne adresy, analizowania danych sesji (który jest wysyłany do adresu URL, a następnie przechowywano w pliku cookie), zamieniając komunikaty o błędach (obiekt JSON z kluczem "błąd") w wyjątek PHP itp.

Krótko mówiąc, nie byłoby łatwiej wyciąć bibliotekę PHP, ponieważ skończyłbyś pisanie zasadniczo tego samego.

Jak widać na przykładzie, są one coraz identyfikator użytkownika ($uid) poprzez wywołanie getUser:

if ($session) { 
    try { 
    $uid = $facebook->getUser(); 
    $me = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
    error_log($e); 
    } 
} 

$ uid jest tylko liczbą całkowitą, a $me to dane dla bieżącego użytkownika (który brzmi jak nie potrzebujesz).Te same dane mogą być pobierane przez wywołanie:

$me = $facebook->api('/' . $uid); //Generates https://graph.facebook.com/[uid] 

Problem mam teraz z tym przykładzie jest to, że funkcja curl wewnątrz klasy Facebooku (makeRequest metoda) jest z jakiegoś powodu powracającego bez zawartości. Tak więc, $me kończy się na niczym, co sprawia, że ​​przykład nadal mówi "Nie jesteś podłączony". Ale jeśli miałbyś wyprowadzić $uid, zobaczysz, że rzeczywiście zawiera on bieżący identyfikator użytkownika.

+0

Czy zapisać go w pliku cookie przez siebie czy muszę konkretnie uruchomić funkcję, aby to zrobić? Ustawiłem plik cookie na wartość true, gdy deklaruję klasę facebook, ale podczas sprawdzania plików cookie w przeglądarce Firefox nie wydaje się, aby coś przechowywano. – j82374823749

+0

@ briggins5 Wygląda na to, że robi to po wywołaniu 'getSession'. – Nicole

+0

Zadzwoniłem pod numer $facebook->getLoginUrl() i getSession, ale nadal nie są przechowywane żadne pliki cookie, z wyjątkiem niektórych pod kategorią Facebooka, ale te nie pojawiają się w sposób konkretny i prawdopodobnie tak by nie było. – j82374823749

0

Czy sprawdziłeś najnowszą wersję facebook.php z github? Najnowsza wersja uwzględnia magiczne cytaty, więc zwróci sesję zamiast wartości zerowej.

+0

Dzięki Peter, tak, mam tę wersję. Może i tak zaktualizuj. Wygląda na to, że po prostu wywołanie CURL nie zwraca nic (w ogóle). – Nicole

0

Jedną z rzeczy, która pomaga sprawdzić nagłówki odpowiedzi z Facebooka czasami (rzadko) mogą być przydatne.

Znalazłem, że musisz wywołać/oauth/autoryzować (z parametrami zapytania), aby autoryzować stronę/aplikację, aby Facebook dostarczył token dostępu.

+0

Wygląda na to, że występuje problem z korzystaniem z lokalnego hosta zamiast z publicznie dostępnego serwera. O ile mogę powiedzieć, że biblioteka PHP obsługuje samą autoryzację, ponieważ w rzeczywistości generuje identyfikator użytkownika, ale nie tworzy pliku cookie. – j82374823749

1

private function setCookieFromSession ($ session = null)

się niepowodzeniem, ponieważ parametr $ domena jest pusty. Używam tego do testowania lokalnego:

if ($domain != '') { 
    setcookie($cookieName, $value, $expires, '/', '.' . $domain); 
} else { 
    setcookie($cookieName, $value, $expires, '/'); 
} 
+0

Dziękuję za odpowiedź. Rozwiązało to problem pracy z localhostem. – j82374823749

+0

, więc jaką wartość powinna mieć wartość domeny $ przy pracy z localhost? – BlueSilver

Powiązane problemy