Autor Zpráva
leorond
Profil
Ahoj, rád bych na své stránky umístil přihlášení / registrace přes Facebook, jak na to? Kde začít?


Našel jsem spoustu článků ale většinou je to v OOP a já mu zrovna moc nehovím a raději mám procedurální.
Alphard
Profil
Facebook jednotlivým vývojářům poskytuje SDK, které komunikaci s jejich API řeší. Toto SDK je (pro vás bohužel) napsané v OOP a není reálné řešit to jinak (resp. je, ale znamenalo by to reimplementovat to SDK, což není triviální). Nejjednodušší bude se smířit s tím, že aspoň volání doho SDK bude objektové, viz návod developers.facebook.com/docs/php/howto/example_facebook_login. Vlastní třídy není třeba vytvářet, jde to zvládnout téměř stylem copy&paste.
leorond
Profil
Ano na tuto stránku jsem koukal, není to složité jen jak mám málo zkušeností s OOP tak je to pro mne složitější. Ještě bych se zeptal jak to funguje, tedy na princip kdy to uživatele tedy přihlásí pomocí údajů na facebooku ale nezapíše ho to do DB, on ale může stejně využívat služby jako přihlášený uživatel. Nebude poté problém třeba s blokací uživatele nebo s odesíláním novinek na mail?

Zkrátka bych tuto cestu rád pochopil než se pustím do něčeho co možná není ta nejlepší cesta.

Děkuji
Alphard
Profil
leorond:
Nebude poté problém třeba s blokací uživatele nebo s odesíláním novinek na mail?
Po úspěšném přihlášení získáte fb id, což je unikátní identifikátor uživatele, který lze použít pro spárování fb účtu s interní reprezentací uživatele. Pokud chcete mail, musíte o něj požádat
$permissions = ['email']; // Optional permissions
a uživatel to při přihlášení musí schválit. Před posíláním novinek ale stejně potřebujete explicitní souhlas.
leorond
Profil
Takže by se dalo říct že je to pohodlnější ale lepší je klasický registrační formulář.


Vlastně už kvůli úplnosti všech údajů a potvrzení například pravidel atd...
Alphard
Profil
leorond [#5]:
Hlavní výhodou přihlášení přes nějakou externí autoritu (facebook, google, seznam, openid) je pro uživatele ušetření času s vypisováním údajů a odpadající potřeba pamatovat si heslo. Výhodou i nevýhodou je určitá ztráta anonymity.

Z mého pohledu je ideální zpřístupnit co nejvíce služeb bez registrace. A když je nějaká registrace nutná, nabídnout uživatelům obojí, vytvoření izolovaného účtu pro konkrétní web i přihlášení se prostřednictvím nějaké externí služby.
kareltvrdik
Profil
SDK není vůbec nutné používat, v podstatě stačí tři přímá volání API, kde se ověří vrácený token a zažádá se o informace z FB účtu. To si člověk může lehce udělat sám. Jen člověk nesmí být líný a pošťourat se v tom, jak to celé funguje.
z FB se vrací na váš script s access_tokenem ve formátu zhruba: mujweb.com/fblogin.php?#access_token=CAAWFHzp18JI....... (dá se to lehce odposlechnout)

Je sice možné že časem za pár let FB může udělat úplně nové API, staré vypnout a budete to muset upravit, ale i pokud budete používat SDK, budete to muset předělat taky.


// get ACCESS TOKEN
$app_accesstoken = gethttps("https://graph.facebook.com/oauth/access_token?client_id=$fbappnum&client_secret=$fbsecret&grant_type=client_credentials");
if(SubStr($app_accesstoken,0,13) == 'access_token=')
{
 // Inspect access token
 $token = $_GET["access_token"];
 $resp = gethttps("https://graph.facebook.com/debug_token?input_token=$token&".$app_accesstoken);
 $dat = json_decode($resp, true);

 $data = $dat["data"];
 if($data["is_valid"] == 1)   // ---------------- success  --------------------
  {
   $resp = gethttps("https://graph.facebook.com/me?fields=id,email,first_name,last_name&access_token=".$token);
   $dat = json_decode($resp, true);

   $id    = $dat['id'];
   $email = $dat['email'];
   $firstname = $dat['first_name'];
   $lastname  = $dat['last_name'];

to je úplně celé a funguje mi to už nějakou dobu.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: