Facebook Connect pro nette
- illagrenan
- Člen | 12
Vytvořil jsem jednoduchý doplněk, který integruje Facebook PHP SDK do nette.
Dokážete díky němu autorizovat uživatele (username, FB_ID, email…) na
klasickém webu anebo vytvořit FB aplikaci na apps.facebook.com
.
De facto se tyto dvě možnosti nijak zásadně neliší – v druhém
případě je obsah canvas_url
(== váš web) zobrazen v
IFRAME
na app_namespace
URL (FB adresa aplikace). Další
čtení je na GitHubu.
- URL doplňku: github.com/illagrenan/nette-facebook-connect
- pro nette verzi: 2.0.x (PHP >=5.3)
- Obahuje Facebook PHP SDK ve verzi 3.2.0
Instalace pomocí Composeru (github…#2-instalace)
{
"minimum-stability": "dev",
"require": {
"illagrenan/nette-facebook-connect": "dev-master"
}
}
Konfigurace (github…#3-konfigurace)
common:
includes:
- facebook/facebook.neon
production < common:
includes:
- facebook/facebook_production.neon
development < common:
includes:
- facebook/facebook_dev.neon
common:
# ...
services:
# ...
facebook:
class: \Illagrenan\Facebook\FacebookConnect([appId: %facebook.app_id%, secret: %facebook.app_secret%],@container)
setup:
- setHeaders()
# ...
Použití (github…5-použití)
...
public function renderDefault()
{
/* @var $fb Illagrenan\Facebook\FacebookConnect */
$fb = $this->context->facebook;
// Autorizoval uživatel naši aplikaci?
if ($fb->isLoggedIn() === FALSE)
{
// Volitelně můžeme změnit URL, na kterou bude uživatel z Facebooku navrácen
$redirectUri = $this->link("//Homepage:default");
$fb->setRedirectUri($redirectUri);
// Přihlásíme ho přesměrováním na Login_URL
$fb->login();
}
else // Uživatel je přihlášený v aplikaci
{
/* @var $user Illagrenan\Facebook\FacebookUser */
$user = $this->template->user = $fb->getFacebookUser();
Debugger::dump($user);
}
}
...
Zde je jen hrubá dokumentace, tu kompletní naleznete na GitHubu.
Velmi vřele uvítám připomínky a návrhy na zlepšení ;o)))
- Filip Procházka
- Moderator | 4668
Snad promineš mou upřímnost, ale není to moc kvalitní doplněk.
- Původní Facebook SDK je na blití sahá na globální proměnné a celý je napsaný jak od od retardovaného koně po lobotomii. Stavět na tomhle není moc dobrý nápad.
- Na konfiguraci používáme CompilerExtension
- Přesměrování pomocí script v HTML ? Tohle je tam nejspíš kvůli přenášení sušenek do javascriptu. Nenapadá mě jiný příčetný důvod, proč bych měl přesměrovávat takhle retardovaně. Každopádně to není potřeba vždy. Někdy stránka nevyužívá javascriptové FB API a tohle je překážkou. Navíc to provedení… Když už je tohle absolutně nutné, tak by bylo lepší přesměrovat uživatele na signál komponenty, která by vykreslila tohle přesměrování v nějaké uživatelsky přívětivé podobně. Vyzvracet to na aktuální stránku není dobrý nápad. Celá tahle třída je jeden velký omyl
- v composeru nemáš definici autoloadu
- statické properties ? Proč?
Co ale můžu pochválit, tak to, že jsi použil composer :)
- illagrenan
- Člen | 12
Ahoj a díky.
- S (ne)kvalitou originální SDK naprosto souhlasím. A koukám tedy, že přicházím s doplňkem s křížkem po funuse (https://github.com/…SDKExtension).
- O CompilerExtension jsem nikde neslyšel / neviděl, takže díky.
- Přesměrování pomocí JS má důvod na CANVAS_PAGE, tedy v momentě, kdy
je aplikace načtená v IFRAME. Pokud bych přesměrovával
->redirect(...)
, měl bych „Facebook v Facebooku“. - + 5) (U)Opravím
- Filip Procházka
- Moderator | 4668
3. díky za objasnění – ale stejně, použití komponenty a vykreslení v signálu je mnohem čistější.
Nechtělo by se ti raději přispět ke mě? Přecejenom už toho mám víc než ty a hodil by se mi někdo, kdo by otestoval věci, které zatím nepotřebuju/nepoužívám :)
Mám rozdělaný social sandbox, kde chci integrovat sociální sítě – twitter a fb prozatím. Tak abych veděl, jestli si mám pohnout, aby bylo na čem testovat :)
Editoval HosipLan (11. 9. 2012 16:53)
- illagrenan
- Člen | 12
HosipLan
Nemám s tím problém. Až bude sandbox, rád se na to podívám.
22
Ne ne to je pro všechny prohlížeče. Jde o to, že uživatel má na
apps.facebook.com/foo-bar
zobrazený IFRAME s mojí aplikací a
já ho z něj potřebuji někam přesměrovat (typicky na autorizační dialog
nebo někam mimo FB).
Je to ekvivalent k:
<a href="..." target="_top">...</a>
- illagrenan
- Člen | 12
To jo to je ± pořád stejné, jde ale o to, jak uživatele dostat
z canvasu na auth dialog – pak už si to skutečně převezme
redirect_uri
.
- Felix
- Nette Core | 1196
HosipLan napsal(a):
Nechtělo by se ti raději přispět ke mě? Přecejenom už toho mám víc než ty a hodil by se mi někdo, kdo by otestoval věci, které zatím nepotřebuju/nepoužívám :)
Mám rozdělaný social sandbox, kde chci integrovat sociální sítě – twitter a fb prozatím. Tak abych veděl, jestli si mám pohnout, aby bylo na čem testovat :)
Ten napad social sandbox se mi libi. Klidne ti s tim pripadne pomuzu nebo otestuju.. Muzeme pouzit i FbTools.
- Filip Procházka
- Moderator | 4668
Já to používám zatím jen na přihlašování a načítání údajů o uživateli, ale to API pro komponenty není úplně ideální – budu ho ještě dolaďovat.
Jinak je to v podstatě jenom zrefaktorované původní SDK od Facebooku, ze kterého se mi protáčel žaludek. Dokonce i API je velice podobné.
Takže ano, mělo by to být použitelné. Mám teď hodně na spěch, takže se tomu nemůžu věnovat, ale má to vysokou prioritu, takže se vynasnažit se k tomu dostat co nejdříve!
- potapnik
- Člen | 127
Fajn, mě stačí vlastně jenom jednoduchý CURL wrapper na aplikace v tabu a na apps.facebook.com, takže něco spíchnu sám, aspoň pochopím jak to všechno funguje.
Až to bude s tím tvým FB API aktuální, tak rád pomůžu.
PHP SDK je opravdu k zblití. Sice jsem myslel, že si spravím chuť použitím čistého CURL a GRAPH API, jenže např. extended access tokeny to posílá jako string, ze který si parsuješ array, ostatní jde jako JSON, takže taky žádná skvělá čistá nádhera…
- akadlec
- Člen | 1326
@Filip Procházka: ahoj, tak co jak jde vyvoj toho FB api? Stáhnul sem si jej od tebe z gitu ale zatím v něm mám hokej ;) Už mám implementovaný twitter a google a teď se pokouším nahodit i fb. Nechtěl bys udělat nějaký malý nástřel. Služby mám implementované, ale lámu si hlavu jak udělat detekci zda je přihlášen a pak postupné přesměrování atd.
Zatím co se mě povedlo nějak implementovat authenticator:
public function authenticate(array $credentials)
{
try {
if ( !$this->facebook->getProfile() ) {
$url = $this->facebook->createDialog('login')->getUrl('page');
if ( $url ) {
$this->httpContext->response->redirect($url);
throw new \Nette\Application\AbortException; // stop!
} else {
throw new NS\AuthenticationException("Could not connect to Facebook. Refresh the page or try again later.");
}
} else {
$accessToken = $this->facebook->getAccessToken();
// Get data about user from facebook
$facebookUser = $this->facebook->getProfile()->getDetails();
if ( $facebookUser ) {
// Pokracovani dale ve hledani usera, connectoru atd.
} else {
throw new NS\AuthenticationException("Could not authenticate you.");
}
}
} catch ( NS\AuthenticationException $e) {
$this->facebook->destroySession();
throw $e;
}
return new Identity($user, $connector);
}
Editoval akadlec (25. 5. 2013 18:44)
- Filip Procházka
- Moderator | 4668
@akadlec: to není úplně ideální řešení, založil jsem si issue a zkusím na to co nejdříve kouknout :) Dyštak mě tam můžeš urgovat a rejpat do mě, kdy už to bude hotové :)