Google OAuth2 na Nette 2.1
- 2rec
- Člen | 40
Nedaří se mi rozchodit Google OAuth2 rozšíření na novém Nette a jelikož k tomuto rozšíření není nic moc nikde psáno, snad mi poradí někdo tady.
Podle návodu jsem nainstaloval rozšíření pomocí composeru, do config.neon přidal
parameters:
google:
id: vase_id
secret: vase_secret
scope: ['https://www.googleapis.com/auth/userinfo.profile', 'https://www.googleapis.com/auth/userinfo.email']
a
services:
google: Google([id: %google.id%, secret: %google.secret%])
authenticator: Model\GoogleAuth
Chyba, kterou mi Tracy ukazuje je Service ‚authenticator‘: No service of type Model\Google found. Make sure the type hint in Model\GoogleAuth::__construct() is written correctly and service of this type is registered.
- honos
- Člen | 109
2rec napsal(a):
Chyba, kterou mi Tracy ukazuje je Service ‚authenticator‘: No service of type Model\Google found. Make sure the type hint in Model\GoogleAuth::__construct() is written correctly and service of this type is registered.
Pise ti to Model\Google
no found of type. Mas authenticator
nejspis v namespace Model;
Oprav si tridu authenticator takto:
namespace Model; // predpokladam ze uz to tam tak mas!
class Authenticator extends /* neco */ {
public function __construct(Google ... // Uprav tento radek
public function __construct(\Google ... // Na toto!
}
Jednoduse pred Hint type Google dej zpetne lomitko a melo by to jit.. :)
- 2rec
- Člen | 40
Šaman napsal(a):
Dej zase celé namespace,
\Table\Users
, nebo použijuse Table\Users
na začátku souboru.
Tohle mi bohužel nepomohlo. Zkusím ještě upřesnit, kde je ta chyba. Laděnka píše
Service 'authenticator': No service of type Users found. Make sure the type hint in GoogleAuth::__construct() is written correctly and service of this type is registered.
a ten kus kódu je z třídy GoogleAuth, kterou jsem opsal z příkladu použití na Nette Google OAuth2
- honos
- Člen | 109
Tomáš Votruba napsal(a):
Také můžeš vyzkoušet poměrně nový doplněk Nette Opauth
To nevypada spatne :)
- 2rec
- Člen | 40
Tomáš Votruba napsal(a):
Také můžeš vyzkoušet poměrně nový doplněk Nette Opauth
Vypadá dobře a i instalace byla docela jednoduchá, ale teď se nemůžu dostat přes chybovou hlášku
Fake login available only in debug mode!
a přitom to zkouším na localhostu. Any ideas?
EDIT: A kdybyste věděli o nějakém návodu, co potom musím udělat, aby se ten web potom dokázal opravdu propojit s Google a měl povolení používat ten jeho OAuth (v README se píše o registraci na cloud.google.com/console), prosím, sem s ním.
EDIT2: Když se zkusím lognout přes Google účet, redirectuje mě to na localhost/test/www/auth/google a vypíše error 404. Jestli mám vytvořit nějakou šablonu ‚google.latte‘, co v ní má být?
Editoval 2rec (23. 1. 2014 16:58)
- honos
- Člen | 109
Ten cloud.google.com/console) je spravce pro vytvoreni aplikace ktera bude pouzivat toto prihlaseni. Vytvoris aplikaci a nasledne #APP_ID nastavis ve sve aplikaci..
Co se tyce ty sablony tak to nevim, zkus se podivat co ti vraci google, jestli pouzivas Requst panel nebo tak neco.. Osobne ted mam mensi problem s tim mim pocitacem a internetem vubec tak ti vic neporadim.
- rixi
- Člen | 109
2rec wrote:
Vypadá dobře a i instalace byla docela jednoduchá, ale teď se nemůžu dostat přes chybovou hlášku
Fake login available only in debug mode!
a přitom to zkouším na localhostu. Any ideas?
Pravdepodobne mas v config.neon nastaveny parameter opauth.debug na FALSE, v pripade takehoto testovania to treba nastavit na TRUE.
EDIT: A kdybyste věděli o nějakém návodu, co potom musím udělat, aby se ten web potom dokázal opravdu propojit s Google a měl povolení používat ten jeho OAuth (v README se píše o registraci na cloud.google.com/console), prosím, sem s ním.
EDIT2: Když se zkusím lognout přes Google účet, redirectuje mě to na localhost/test/www/auth/google a vypíše error 404. Jestli mám vytvořit nějakou šablonu ‚google.latte‘, co v ní má být?
Na googlu podobne ako ako aj pre twitter alebo facebook treba vytvorit aplikaciu, kde ziskas pridelene autorizacne kluce, ktore treba potom zapisat v neonu. Co ten redirect sposobuje teraz z hlavy neviem. Na localu sa myslim ze da testovat prihlasenie cez twitter (auth prebehne uspesne aj z localhostu). V nastaveni twitter aplikacie sa totiz da vypnut kontrolu, ze z akej domeny sa snazi user autentifikovat.
Editoval rixi (24. 1. 2014 11:02)
- 2rec
- Člen | 40
rixi napsal(a):
Pravdepodobne mas v config.neon nastaveny parameter opauth.debug na FALSE, v pripade takehoto testovania to treba nastavit na TRUE.
Jo, tak to bylo fakt ono, jakmile jsem prehodil na TRUE, fake login funguje.
Na googlu podobne ako ako aj pre twitter alebo facebook treba vytvorit aplikaciu, kde ziskas pridelene autorizacne kluce, ktore treba potom zapisat v neonu. Co ten redirect sposobuje teraz z hlavy neviem. Na localu sa myslim ze da testovat prihlasenie cez twitter (auth prebehne uspesne aj z localhostu). V nastaveni twitter aplikacie sa totiz da vypnut kontrolu, ze z akej domeny sa snazi user autentifikovat.
Tohle je prave to nejdulezitejsi. Vytvoril jsem appku, pridelili mi klice a ja jsem je zapsal do config.neon do prislusnych radku:
opauth:
path: '/auth/'
debug: true # nastaveni debug mode pro opauth
callback_url: '{path}callback'
security_salt: '123abc456def'
callback_transport: 'session'
Strategy: [
Facebook: [
app_id: ''
app_secret: ''
],
Google: [
client_id: 'xxxxxxxxxxxxx.apps.googleusercontent.com'
client_secret: 'xxxxxxxxxxxxxxxxxxxxxxxx'
],
Twitter: [
key: '',
secret: ''
]
]
A problem mi dela porad ten redirect. Vytvoreni prazdneho google.latte zobrazi fakt jenom prazdnou sablonu (duh! co jsem taky cekal :D) a jinak hlasi porad tu samou chybu 404 – Page not found. Missing template ‚…\wamp\www\test\app\templates\Auth\google.latte‘.
Co ten redirect sposobuje teraz z hlavy neviem.
Uz jsi to nekdy zprovoznoval? Jestli si nevzpomenes, mohl by ses prosim kdyztak mrknout k sobe, co bych mel ted udelat?
Editoval 2rec (25. 1. 2014 16:31)
- 2rec
- Člen | 40
V ukázkovém presenteru AuthPresenter.php jsem našel funkci s tímto komentářem:
public function actionCallback($strategy)
{
$identity = $this->opauth->callback($strategy);
/**
* There is a good place for transformation of 3th part identities to your app identity.
* Like pairing with your app accounts.
*/
$this->context->user->login($identity);
$this->redirect("Homepage:default");
}
To tedy nejspíš znamená, že právě tady by mělo být jakési propojení s tou Google aplikací, kterou jsem vytvořil. Nicméně pořád jsem na stejném místě. Jak a co přesně propojit?
Editoval 2rec (25. 1. 2014 17:11)
- rixi
- Člen | 109
2rec wrote:
Uz jsi to nekdy zprovoznoval? Jestli si nevzpomenes, mohl by ses prosim kdyztak mrknout k sobe, co bych mel ted udelat?
V nastaveni credentials v aplikacii mas nastavenu spravnu redirect's URL? Mala by byt v tvare
http://domena.com/auth/google/oauth2callback
Editoval rixi (25. 1. 2014 17:26)
- 2rec
- Člen | 40
rixi napsal(a):
V nastaveni credentials v aplikacii mas nastavenu spravnu redirect's URL? Mala by byt v tvare
http://domena.com/auth/google/oauth2callback
Tam jsem nemel nic, zatim jsem se zameroval jenom na to, jak se vubec dostat k tomu jejich logovacimu formulari. Dal jsem tam
http://tworec.www3.cz/auth/google/oauth2callback
, ale nic se nezmenilo. Porad aplikace pise, ze chybi template google.latte.
To je opravdu tak slozita vec, i kdyz mi jde jenom o jedine tlacitko na webu sign in with Google a potvrzeni pristupu k par informacim? Cekal jsem puvodne neco mnohem jednodussiho.
Editoval 2rec (25. 1. 2014 17:43)
- rixi
- Člen | 109
Nie je to nic komplikovane, tato kniznica je pre Nette optimalizovana dobre. Vyzera to tak, ze nemas spravne zaregistrovane routy. Pokial pouzivas routerFactory.php, skus pridat do metody createRouter:
\NetteOpauth\NetteOpauth::register($router);
resp. ich tam natvrdo rucne:
$router[] = new Route('/auth/logout', 'Auth:logout');
$router[] = new Route('/auth/callback', 'Auth:callback');
$router[] = new Route('/auth/<strategy>', 'Auth:auth');
$router[] = new Route('/auth/<strategy>/oauth2callback', 'Auth:auth');
$router[] = new Route('/auth/<strategy>/oauth_callback', 'Auth:auth');
$router[] = new Route('/auth/<strategy>/int_callback', 'Auth:auth');
- 2rec
- Člen | 40
rixi napsal(a):
Nie je to nic komplikovane, tato kniznica je pre Nette optimalizovana dobre. Vyzera to tak, ze nemas spravne zaregistrovane routy. Pokial pouzivas routerFactory.php, skus pridat do metody createRouter:
\NetteOpauth\NetteOpauth::register($router);
resp. ich tam natvrdo rucne:
$router[] = new Route('/auth/logout', 'Auth:logout'); $router[] = new Route('/auth/callback', 'Auth:callback'); $router[] = new Route('/auth/<strategy>', 'Auth:auth'); $router[] = new Route('/auth/<strategy>/oauth2callback', 'Auth:auth'); $router[] = new Route('/auth/<strategy>/oauth_callback', 'Auth:auth'); $router[] = new Route('/auth/<strategy>/int_callback', 'Auth:auth');
Bohuzel, porad stejna chyba. Nic se nezmenilo.
Napada me, co kdybych ti ukazal vsecko pres Teamviewer, pripadne ti dal nejaky rychlejsi komunikacni nastroj nez tohle forum a pak bych sem akorat napsal podrobny navod, jak to zprovoznit?
- o5
- Člen | 416
Ahoj, nedaří se mi s nette-opauth rozchodit fungování na projektu, kde nastavuju session cookie_domain (pro subdomény), takto:
nette:
session:
autoStart: smart
cookie_domain: .project.dev
Po redirectu z facebooku dostanu notice Undefined index: opauth a vytvoří se mi PHPSESSID 2×, jednou pro project.dev a po druhé pro .project.dev. Problém zmiňuji tady.
Používáte někdo přihlašování přes facebook na projekt se subdoménama? Možná to je jen věc nějakýho nastavení ve fb app, ale nedaří se mi to najít :/
EDIT: vyřešil jsem to takto: autoStart: yes
Editoval o5 (23. 4. 2014 13:37)
- Filip Procházka
- Moderator | 4668
Vyzkoušej kdyby/google, bohužel k tomu ještě není moc dokumentace, ale tady v téhle issue jsme s jedním uživatelem řešili jak to rozběhat a nějaký první problémy co s tím měl.
- akadlec
- Člen | 1326
Jop můžu potvrdit že funguje ;) jen tedy ještě pořešit ty nějaké chyby co se objevily :(
- Když se obnovuje stored request tak se nějak obchází router? Protože když si dumpnu ten uložený request, tak v něm je vše ja má být i ta entita která je použita jako parametr action kde se má vrátit, vidím i správný action, ale když se ten request obnoví tak se použije úplně jiná routa.
- Když se obnovuje stored request tak event onResponse se přeskakuje?
- Asi bych se přimlouval za tu destroy metodu jako u FB a githubu, když tak můžu udělat pull.
- Filip Procházka
- Moderator | 4668
@akadlec nechceš to řešit v issues? nechci tady spamovat cizí thread :) Btw tu destroy metodu jsem tam přidal.