Jak zjistit identitu uživatele podle cookie

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

Rozchodil jsem Websocketový server (http://socketo.me/) a potřebuji zjistit, zdali se mi připojil přihlášený uživatel. Chci tedy získat Nette\Security\Identity. Ve zbytku webu je přihlašovací prostor nastavován takto:

// basePresenter
$this->user->getStorage()->setNamespace('namespace');

Znám cookie a většinu hlaviček, takže jsem se pokoušel vytvořit falešný Nette\Http\Request a response, pomocí nich potom Nette\Http\Session a následně Nette\Http\UserStorage. UserStorage mi však při zavolání getIdentity() vrací pořád NULL.


Stále se mi nedaří získat v sessionSection → data private něco jiného než authenticated ⇒ NULL, identity ⇒ NULL:
code
Nette\Http\UserStorage #d870
namespace private ⇒ „namespace“ (10)
sessionHandler private ⇒ Nette\Http\Session #8394
| regenerated private ⇒ TRUE
| options private ⇒ array (14)
| | gc_maxlifetime ⇒ 15548400
| | cookie_lifetime ⇒ 15548400
| | referer_check ⇒ ""
| | use_cookies ⇒ 1
| | use_only_cookies ⇒ 1
| | use_trans_sid ⇒ 0
| | cookie_path ⇒ „/“
| | cookie_domain ⇒ ""
| | cookie_secure ⇒ FALSE
| | cookie_httponly ⇒ FALSE
| | cache_limiter ⇒ NULL
| | cache_expire ⇒ NULL
| | hash_function ⇒ NULL
| | hash_bits_per_character ⇒ NULL
| request private ⇒ Nette\Http\Request #54ca
| | method private ⇒ „GET“ (3)
| | url private ⇒ Nette\Http\UrlScript #abee { … }
| | query private ⇒ array ()
| | post private ⇒ array ()
| | files private ⇒ array ()
| | cookies private ⇒ array (9) [ … ]
| | headers private ⇒ array (1) [ … ]
| | remoteAddress private ⇒ „10.0.0.51“ (9)
| | remoteHost private ⇒ NULL
| | rawBody private ⇒ NULL
| response private ⇒ Nette\Http\Response #def0
| | cookieDomain ⇒ ""
| | cookiePath ⇒ „/“
| | cookieSecure ⇒ FALSE
| | cookieHttpOnly ⇒ TRUE
| | warnOnBuffer ⇒ TRUE
| | code private ⇒ 200
sessionSection private ⇒ Nette\Http\SessionSection #6fb5
| session private ⇒ Nette\Http\Session #8394
| | regenerated private ⇒ TRUE
| | options private ⇒ array (14) [ … ]
| | request private ⇒ Nette\Http\Request #54ca { … }
| | response private ⇒ Nette\Http\Response #def0 { … }
| name private ⇒ „Nette.Http.UserStorage/namespace“ (33)
| data private ⇒ array (2)
| | authenticated ⇒ NULL
| | identity ⇒ NULL
| meta private ⇒ NULL
| warnOnUndefined ⇒ FALSE
code


Tak jsem to po hodinách zkoušení vzdal a vyřešil to tak, že si u každého uživatele pamatuji nějaký token, který si předám v cookie. Websocketový server podle něj potom rozpozná uživatele.

Editoval oldrich.valek (25. 2. 2015 15:08)

bazo
Člen | 620
+
0
-

hladas nieco taketo https://github.com/…ion-provider ?

oldrich.valek
Člen | 21
+
0
-

No to jsem zkoušel. I tohle: https://github.com/…ion-provider Ale identitu uživatele se mi z toho stejně nepodařilo dostat. Je teda možné, že jsem na to nešel tak jak tvůrci zamýšleli. Teď koukám že ty jsi vlastně tvůrce. Chápu to tedy dobře, že potom v mětodě onOpen($conn) vytvořím Nette\Http\UserStorage pomocí $conn->session a tu identitu by mi to mělo najít?

Editoval oldrich.valek (25. 2. 2015 8:57)

bazo
Člen | 620
+
0
-

no tazko povedat, vidis z ktoreho roku je posldny commit, mozno uz nejde nettecko tak ojekabatit ako vtedy. ale ano, tak to bolo zamyslane, ze v $conn->session by mala byt nette session

oldrich.valek
Člen | 21
+
0
-

Škoda no… bylo by to lepší řešení.