2013-08-22 13 views
8

UPDATE Wygląda na to, że mój osobisty adres e-mail nie był używany od lat. Facebook oznaczył go jako nieaktywny i nie zwrócił go jako części JSON.Facebook Graph nie zwraca e-maila

mam uwierzytelniania użytkownika z Facebook po stronie klienta przy użyciu tego adresu URL:

https://www.facebook.com/dialog/oauth? 
    client_id=xxx& 
    redirect_uri=https://www.facebook.com/connect/login_success.html& 
    scope=email 

otrzymam kod Potem zamian za Token:

https://graph.facebook.com/oauth/access_token? 
    code=xxx& 
    client_id=xxx& 
    client_secret=xxx& 
    redirect_uri=xxx 

I następnie wysłać token mój serwer i ja pobieramy wykres Fb, aby uzyskać informacje o użytkowniku, w tym o e-mailu.

https://graph.facebook.com/me?access_token=xxx 

Z jakiegoś powodu, mam wszystko użytkownikowi „O” info, ale nie jego/jej e-mail!

Co zrobiłem źle?

+1

Spójrz tutaj: http: // stackoverflow .pl/question/9347104/register-with-facebook-czasami-nie-dostarczam-maila –

+0

Testowałem z moim własnym kontem na Facebooku i adres, z którym się zarejestrowałem, nie był używany od lat! To może być bardzo ważna przyczyna. –

+0

Jeśli używasz wersji 2.4, musisz zażądać e-maila w zmiennej fields = ... (i dowolnych innych publicznych profilach). W przeciwnym razie/ja podałbym tylko nazwę i identyfikator – PalDev

Odpowiedz

5

Według Facebook Documentation:

Domyślnie nie wszystkie pola w danym węźle lub krawędzi są zwracane, gdy dokonaniu kwerendy. Możesz wybrać pola (lub krawędzie), które chcesz zwrócić z parametrem zapytania "fields". Jest to naprawdę użyteczne, aby twoje wywołania API były wydajniejsze i szybsze.

Jest to poprawne z wersji v2.4 (poprzednie wersje pobierały niektóre pola domyślne).

Po zarejestrowaniu nowej aplikacji masz prawo automatycznie (bez ręcznego sprawdzania) do trzech uprawnień: e-mail, public_profile i user_friends. W kodzie „e-mail” jest w zasięgu (co jest dobre), więc po prostu zmienić zapytanie do:

https://graph.facebook.com/me?access_token=xxx&fields=email 

Prawdopodobnie chciał pola public_profile które automatycznie dostał w poprzednich wersjach API. Czy tak więc, dodać "public_profile" do zakresu:

https://www.facebook.com/dialog/oauth? 
    client_id=xxx& 
    redirect_uri=https://www.facebook.com/connect/login_success.html& 
    scope=email,public_profile 

A teraz dodać pola nazwa użytkownika zapytanie:

https://graph.facebook.com/me?access_token=xxx&fields=first_name,last_name,gender,email,timezone,age_range,verified 

Powodzenia

+1

Użyłem również nazwy jako jednej partii, co utrudniało identyfikację imienia i nazwiska międzynarodowych nazw z wieloma spacji. Postępowałem zgodnie z twoją metodą, aby uzyskać oddzielne imię i nazwisko i pomyślałem o dzieleniu się nim na wypadek, gdyby ktoś pomógł. **/me? fields = email, first_name, last_name ** – Kareem

+0

Wszystkie odniesienia do/me (public_profile) można znaleźć tutaj https://developers.facebook.com/docs/facebook-login/permissions#reference-public_profile – Kareem

Powiązane problemy