Integrace přihlášení a registrace uživatelů prostřednictvím Facebooku je v moderních webových a mobilních aplikacích běžnou praxí. PHP SDK Facebooku nabízí robustní řešení pro správu těchto procesů. Tato příručka se zaměřuje na praktické aspekty implementace, řešení běžných problémů a bezpečnostní doporučení.
Nastavení PHP SDK Facebooku
Pro začátek je nutné mít PHP SDK nainstalované. Nejjednodušší způsob je stáhnout balíček a nahrát ho na webserver. Je důležité nahrát celý adresář, nikoli pouze složku src. I když je doporučeným způsobem instalace Composer, pro jednu závislost to nemusí být vždy efektivní, pokud Composer již nemáte spuštěný.
Klíčovým krokem je zahrnutí autoloaderu poskytovaného SDK:
require_once __DIR__ . '/vendor/autoload.php'; // nebo cesta k autoloaderu
Doporučuje se aktivovat volbu „AppSecret Proof“ v nastavení vaší aplikace. Nemusíte se starat o přidávání parametru při používání PHP SDK, bude automaticky přidán s každým voláním. Toto se týká pouze volání na serveru; používání JavaScript SDK pro volání API stále funguje dobře, i když aktivujete AppSecret Proof.
Správa uživatelských dat v databázi
Pro efektivní správu uživatelů je nezbytná interakce s databází. Následující příklad ukazuje, jak ověřit existenci uživatele a buď aktualizovat jeho data, nebo vytvořit nový záznam.
Čtěte také: Krok za krokem: Betonová stěrka
<?phpclass User { private $db; function __construct($conn){ if($conn->connect_error){ die("Failed to connect with MySQL: " . $conn->connect_error); } else { $this->db = $conn; } } function checkUser($userData = []){ if(!empty($userData)){ $prevQuery = "SELECT * FROM user WHERE oauth_provider = '".$userData['oauth_provider']."' AND oauth_uid = '".$userData['oauth_uid']."'"; $prevResult = $this->db->query($prevQuery); if($prevResult->num_rows > 0){ // Aktualizace uživatelských dat, pokud uživatel již existuje $query = "UPDATE user SET first_name = '".$userData['first_name']."', last_name = '".$userData['last_name']."', picture = '".$userData['picture']."', link = '".$userData['link']."', modified = '".date("Y-m-d H:i:s")."' WHERE oauth_provider = '".$userData['oauth_provider']."' AND oauth_uid = '".$userData['oauth_uid']."'"; $update = $this->db->query($query); } else { // Vložení uživatelských dat $query = "INSERT INTO user SET oauth_provider = '".$userData['oauth_provider']."', oauth_uid = '".$userData['oauth_uid']."', first_name = '".$userData['first_name']."', last_name = '".$userData['last_name']."', picture = '".$userData['picture']."', link = '".$userData['link']."', created = '".date("Y-m-d H:i:s")."', modified = '".date("Y-m-d H:i:s")."'"; $insert = $this->db->query($query); } // Získání uživatelských dat z databáze $result = $this->db->query($prevQuery); $userData = $result->fetch_assoc(); } return $userData; }}?>Soubor fbConfig.php
Pro inicializaci session a zahrnutí autoloaderu Facebook SDK je vhodné vytvořit konfigurační soubor fbConfig.php:
<?phpif(!session_id()){ session_start();}require_once __DIR__ . '/vendor/autoload.php';// Zde by měly být definovány App ID a App Secret// např.// define('FB_APP_ID', 'Vase_App_ID');// define('FB_APP_SECRET', 'Vase_App_Secret');// define('FB_REDIRECT_URL', 'Vase_Redirect_URL');// Vytvoření instance Facebook SDK// $fb = new Facebook\Facebook([// 'app_id' => FB_APP_ID,// 'app_secret' => FB_APP_SECRET,// 'default_graph_version' => 'v12.0',// ]);?>Práce s Access Tokenem a API voláními
Vyhněte se žonglování s Access Tokeny pomocí jedné z pomocných tříd nového SDK. Mějte na paměti, že relaci z Helperu můžete získat pouze jednou. Pokud potřebujete provádět více volání API pomocí AJAXu a bez obnovení stránky, musíte uložit Access Token do PHP relace znovu.
Zde je příklad základního volání API s použitím předaného Access Tokenu:
<?php// Příklad získání dat o uživatelitry { $response = $fb->get('/me?fields=id,name,email,picture,link', $accessToken); $user = $response->getGraphUser(); echo 'ID: ' . $user['id']; echo 'Jméno: ' . $user['name']; // ... další data} catch(Facebook\Exception\FacebookResponseException $e) { // Když Graph vrátí chybu echo 'Graph returned an error: ' . $e->getMessage(); exit;} catch(Facebook\Exception\FacebookSDKException $e) { // Když se objeví chyba při komunikaci s FB echo 'Facebook SDK returned an error: ' . $e->getMessage(); exit;}?>Důležité: Funkce "Like Gating" již není povolena a parametr "liked" nebude dostupný v aplikacích vytvořených po 7. srpnu 2014. Pokud tedy vaše aplikace spoléhá na zjištění, zda uživatel "olajkoval" stránku, pro nové aplikace to nebude fungovat.
Řešení problémů s přihlášením a relacemi
Častým problémem je rozpoznání, zda je uživatel skutečně přihlášen na Facebooku. Může se stát, že skript projde a data o uživateli se načtou, i když se uživatel z Facebooku odhlásil. Přihlášeného ověřeného uživatele poznáte až v případě, že se vám načtou jeho profilová data.
Čtěte také: Betonový efekt snadno a rychle s Primalexem
Pokud se uživatel přihlásí přes Facebook a v databázi mu vytvoříte účet, může nastat problém při pokusu o klasickou registraci se stejnými údaji. Můžete to řešit více způsoby, například:
- Zobrazením informace, že klasická registrace bude propojena s FB účtem a pokračovat dál.
- Možností propojení existujícího klasického účtu s Facebookem.
Problémy s novým oknem při přihlášení
Pokud se přihlášení otevírá v novém okně a po úspěšném přihlášení se celý web načte do tohoto okna, je to nežádoucí. Řešením může být použití JavaScriptu. Jakmile by mělo dojít k přesměrování, spustíte JavaScript, který okno zavře a aktualizuje okno, odkud bylo otevřeno. Tímto způsobem se minimalizuje narušení uživatelského zážitku.
Registrace a přihlášení v mobilních aplikacích
Pro mobilní aplikace platí podobné principy, ale s několika specifiky:
- Registrace se provádí pro každou platformu zvlášť.
- U knihoven je třeba dát pozor na použitou verzi.
- Zobrazení tlačítka je v režii mobilní aplikace. Vývojář je zodpovědný za jeho vzhled a umístění.
- Mobilní aplikace zavolá metodu login z FB SDK.
- První a následující přihlášení jsou různá.
- Po návratu je vhodné provést kontrolu, zda uživatel poskytl všechny potřebné požadované údaje. Není dobré spoléhat na to, že se vrátí vše vyplněné. Uživatel může poskytnutí údajů odmítnout nebo je nemusí mít v profilu uvedené. Také není výjimkou, že FB SDK vrátí chybu i když pro to z pohledu uživatele není žádný zjevný důvod.
- Pokud se jedná o aplikaci bez backendu, proces končí.
- Jako parametr se posílá token a seznam požadovaných údajů.
Na straně backendu je třeba rozlišovat dvě situace:
- registrace (= první přihlášení uživatele),
- přihlášení (= opakované přihlášení).
Za zmínku stojí otázka, jaký údaj používat v aplikacích jako jednoznačný identifikátor uživatele. Ačkoli se e-mail může zdát jako logická volba, vhodnější je používat FB ID, jelikož e-mail nemusí být vždy dostupný nebo ověřený.
Čtěte také: potíže s navigací na telefonech
Povinnost přihlášení přes Apple ID
Pokud mobilní aplikaci vyvíjíte také pro iOS, stojí za zmínku povinnost nabídnout uživateli přihlášení přes Apple ID, pokud aplikace nabízí jakékoli jiné externí přihlašovací služby.
tags: #php #sdk #facebook #registrace #aplikace
