Facebookra fejlesztés 2

facebookAz első részben odáig jutottunk el, hogy rávettük a facebookot, hogy hitelesítse az alkalmazásunkat, és a userhez tartozó azonosítót és ideiglenes session azonosítót el tudtuk menteni. Mivel éppen egy facebook klienst fejlasztünk nekünk egy olyan session-ra lesz szükségünk ami örökké tart.

Szerencsére a sok dokumentáció több helyen is határozottan kijelenti, hogy örök életű session-ok nem léteznek többé. Nem igazán értem, hogy ezt miért hangsúlyozzák annyira, mert valójában nem is igaz.

A második hitelesítés

A második hitelesítés során kaphatunk jogosultságokat a user adataihoz. Jó esetben a post authorize redirect url-re való visszairányításakor egyből kihasználjuk a lehetőséget, hogy a usert rávegyük arra, hogy engedélyezze számunkra a megfelelő hozzáféréseket. Több különböző hozzáférés van, listájuk itt elérhető. Ezek közül az offline_access az ami egy végtelen session key-t biztosít a számunkra.

Engedélyeket úgy tudunk szerezni, hogy a usert a facebook oldalon ide-oda irányítgatjuk. A user minden egyes oldalon engedélyezhet egy-egy jogosultságot az alkalmazás számára.

Tehát az első hitelesítés után a facebook visszadobta a usert az általunk megadott post authorize redirect url-re. Ebben a fájlban összeállthatunk egy speciális linket amire kattintva a user visszajut a facebook oldalra, hogy engedélyezze azt amire vágyunk.

<?php
$authorizeLink = 'http://www.facebook.com/authorize.php?api_key='.$api_key.'&v=1.0';
$link_status_update = urlencode($authorizeLink . '&ext_perm=status_update');
$link_read_stream = urlencode($authorizeLink . '&ext_perm=read_stream&next='.$link_status_update.'&next_cancel='.$link_status_update);
$link_offline_access = $authorizeLink . '&ext_perm=offline_access&next='.$link_read_stream.'&next_cancel='.$link_read_stream;

$link_getPermissions = $link_offline_access;
?>

A kód egy kis magyarázatra szorul. A $authorizeLink a különböző jogosultságok engedélyezések urljeinek közös része, ez a rész megtalálható mindegyikben.
Három jogosultságot kérünk, amelyhez három linkre lesz szükségünk. Mindegyik a $authorizeLink-kel fog kezdődni majd az ext_perm paraméterrel folytatódik, melynek értékeként megadjuk a három áhított jogosultság elnevezését: status_update, read_stream, offline_access.

Végül nem teszünk mást mint a három url-t egymás után fűzzük, úgy hogy az egymást követők az előző next paraméterébe kerüljenek urlencode-olt formában. Kicsit bonyolultabb leírni mint amennyire valójában az.

Ha a felhasználónk rákattint erre a linkre akkor visszajut a facebook-ra és egy ablak arra kéri, hogy kattintson a benne lévő gombra ahhoz, hogy biztosítsa alkalmazásunk számára az első jogot. Az első után a másodikat, majd a harmadikat. Végül a user bezárhatja a facebook ablakot.

Az alkalmazásunk oldalán nem kell a második hitelesítés során semmi mást tennünk, mert tulajdonképpen ez történik, hogy az egy órára szóló session-key élete végtelenítődik, így azt amit korábban már elmentettünk mostantól fogva addig használhatjuk amíg a user az engedélyt vissza nem vonja.

Engedélyek vizsgálata

Menet közben időnként eszünkbe juthat, hogy ellenőrizzük, hogy a user nem vonta-e vissza a korábban megadott engedélyt. ezt a következőképpen tehetjük meg:

<?php
if($facebook->api_client->users_hasAppPermission('offline_access', $facebookUserId)){
   //itt csináljuk azt amihez kell az offline_access
   }
?>

Engedélyek visszavonása

Mivel sem az engedélyek biztosítása, sem azok visszavonása nem a saját alkalmazásunkban történik hanem a facebook oldalain nem ártana ha valahogyan tudtunkra jutna amikor egy user visszavonja a jogokat.

Ha jobban megnézzük az alkalmazásunk beregisztrálásakor megadott adatokat, akkor találunk köztük egy post remove callback url nevű is. Ezt az url-t fogja meghívni a facebook amikor a user visszavonja a hitelesítést. A user nem lesz ide átirányítva a facebook egyszerűen csak kiküld erre az url-re pár adatot, köztük a facebbok user_id-t amit elkapva az alkalmazásunk tudtára tudjuk adni, hogy a user visszavonta a hozzáférést.

Ez a két bejegyzés valójában csak egy igen nyúlfarknyi bepillantást ad a facebook platform működésébe, de remélem, hogy segít átevickélni a kezdeti nehézségeken. Így hát mindenkinek jó kódolást!

2 thoughts on “Facebookra fejlesztés 2

  1. Nagyon jó leírás mindkettő, nem akarok követelőző lenni de egy gyakorlati példa, amiben egy egyszerű bejelentkezés és kiíratás van, hogy gratulálok bejelentkeztél vagy egy comment rendszer hogy beléphet és commentelhet a facebook acc-jával, hihetetlen jó lenne 🙂

  2. Nem tudom volt e már ilyen tapasztalata valakinek de ha a felhasználó nem adott meg profilképet a facebook-on attól én még kapok linket ami mondjuk azt a szürke képet adja vissza? vagy linket se kapok tehát semmit se. Mert én ez alapján szeretném eldönteni hogy vendég e aki nem tud megadni képet vagy fb-felhasználó akinek alapból van képe. A válaszokat előre is köszönöm.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöljük.