Google OAuth2 na Nette 2.1

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
2rec
Člen | 40
+
0
-

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
+
0
-

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
+
0
-

Už to projde, děkuju.

Ale teď to zase nemůže najít Table/Users. Nevíte, jakou změnu budu muset udělat tady?

/** @var Table\Users */
    protected $users;



    public function __construct(Google $google, Users $users)
    {
        $this->google = $google;
        $this->users = $users;
    }
Šaman
Člen | 2666
+
0
-

Dej zase celé namespace, \Table\Users, nebo použij use Table\Users na začátku souboru.

Editoval Šaman (20. 1. 2014 23:01)

2rec
Člen | 40
+
0
-

Šaman napsal(a):

Dej zase celé namespace, \Table\Users, nebo použij use 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

Tomáš Votruba
Moderator | 1114
+
0
-

Také můžeš vyzkoušet poměrně nový doplněk Nette Opauth

honos
Člen | 109
+
0
-

Tomáš Votruba napsal(a):

Také můžeš vyzkoušet poměrně nový doplněk Nette Opauth

To nevypada spatne :)

2rec
Člen | 40
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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?

honos
Člen | 109
+
0
-

čeče, s tebou jsou starosti :) Kdyz ti to vypise 404 oukni se do debugbaru zda tam mas nastavene ty roury a jakou to vlastne routu to hleda, co ti vlastne vraci ten google treba pomoci zalozky ‚network‘ v debug konsoli v prohlizeci! hledej aliku hledej..

o5
Člen | 416
+
0
-

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
+
0
-

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
+
0
-

Jop můžu potvrdit že funguje ;) jen tedy ještě pořešit ty nějaké chyby co se objevily :(

  1. 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.
  2. Když se obnovuje stored request tak event onResponse se přeskakuje?
  3. 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
+
0
-

@akadlec nechceš to řešit v issues? nechci tady spamovat cizí thread :) Btw tu destroy metodu jsem tam přidal.

akadlec
Člen | 1326
+
0
-

@Filip Procházka: no bod 1 a 2 mě připadal mimo téma té issue ;) a vlastně je i mimo téma tady ;)

Filip Procházka
Moderator | 4668
+
0
-

@akadlec issues může být v repu víc než jedna :P