ugrás a tartalomhoz

Facebook api kérdések

gabesz666 · 2012. Jan. 9. (H), 20.50
Sziasztok!

Felmerült két probléma a facebook sdk használata közben.
1. Az egyik oldalamon a főoldalt betöltve lekérném a bejelentkezett felhasználókhoz tartozó adatokat, de amíg a kliens oldalon úgy tűnik, hogy be van jelentkezve a user (a Kijelentkezés gombot rendereli a megfelelő helyre), addig a szerver oldalon azt mondja a fb, hogy nincs bejelentkezve senki. A facebook doksijából kiindulva ez a kód állapítja meg, hogy be van-e jelentkezve a felhasználó (szerver oldalon):

try {

	$user = $facebook->api('/me','GET');
	$userId = $user['id'];

} catch(FacebookApiException $e) {

	$userId = false;

}   

if($userId) { /* A user bejelentkezve */ }
Tehát a kérdésem az volna, hogy mi miatt van kliens oldal szerint bejelentkezve, míg szerver oldal szerint nem a user?

2. A másik alkalmazásomban a bejelentkezés után érdekes módon meghívódik az auth.logout eseményre definiált függvény is. Oké, kis netes keresés után rábukkantam, hogy másnál is előfordul ilyen. Gondoltam, hogy ha lekérem a login status-t, akkor azzal letudom kezelni a "login logout" eseteket. A következő kódot próbáltam:

FB.Event.subscribe('auth.logout', function() {
	FB.getLoginStatus(function(response) { 
		console.log(response.authResponse);
	});
});
Nem értem ez hogyan lehetséges, de a konzolra először kiír egy tök üres objektumot, majd 2-3 mp elteltével megjelenik az authResponse (ugyanabban a konzol sorban, ami az előbb még teljesen üres volt). Természetesen így meg nem tudom leellenőrizni, hogy be van-e még jelentkezve a felhasználó vagy sem. Találkozott már valaki ilyennel? Miért fut le a callback függvény a válasz megérkezése előtt?

Köszönöm a válaszokat!
 
1

Bejelentkezve

Poetro · 2012. Jan. 9. (H), 21.50
Lehet, hogy a felhasználó a Facebook-ba be van jelentkezve, de a te alkalmazásodba nem. Egyáltalán hogyan csinálod az alkalmazásodba történő bejelentkezést?
A második probléma esetén pedig kicsit több adatot loggolj, például az esemény nevét is, mert így nehéz bármiből is kiindulni. Az is lehet, hogy valami teljesen más loggolt valami mást a konzolba.
2

Igen, eddig jutottam én is

gabesz666 · 2012. Jan. 9. (H), 23.10
Lehet, hogy a felhasználó a Facebook-ba be van jelentkezve, de a te alkalmazásodba nem. Egyáltalán hogyan csinálod az alkalmazásodba történő bejelentkezést?


Nekem csak a userId-re van szükségem. Tegyük fel, hogy valóban csak a facebookba és nem az app-ba vagyok bejelentkezve. Ekkor is kéne működnie a "$user = $facebook->api('/me','GET');" sornak, ami lekéri a user alapadatait, ami között szerepel az id-je. Azonban sok esetben a $user változó false lesz, míg a főoldalon a kijelentkezés gombot rajzolja ki. A kérdésedet nem értem. Én nem csinálom sehogy a bejelentkezést. A user jön, rákattint a login gombra, megjelenik a bejelentkező ablak, majd bejelentkezés után lefut az auth.login eseményre definiált függvény.

A második probléma esetén pedig kicsit több adatot loggolj, például az esemény nevét is, mert így nehéz bármiből is kiindulni. Az is lehet, hogy valami teljesen más loggolt valami mást a konzolba.


Nem más loggolt, egyetlen egy darab console.log van kódban. A logout eseményre átirányít egy másik oldalra a kód, emiatt is figyeltem fel a hibára, mivel login után egyből átirányított a megadott oldalra.
4

Más kódja

Poetro · 2012. Jan. 9. (H), 23.44
Lehet, neked nem volt más console.log-od, de a Facebook is szokott konzolra írogatni. Egyébként pedig console.log helyett hasznosabb tud lenni egy breakpoint berakása a megfelelő függvénybe, mert több adat kiderül arról, hogy mi, és hogyan is futott le.
3

Előfordul, hogy nincs

Pethical · 2012. Jan. 9. (H), 23.27
Előfordul, hogy nincs session-öd ( facebook session ), hiába be van lépni a user. Ilyenkor át kell dobni a loginurl-re, ahol minden nélkül vissza fog dobni, de már lesz session.

 $userid = facebook->getUser();
 if(!$userid)
 {
  // getloginurl... header... die... ilyenek
 }
 $user = $facebook->api('/me');
 $userid = $user['id'];
 
A facebook nem fog neked infót adni hozzád be nem lépett emberről... De akkor biztos nem, ha nem nyilvános a profilja.