Identita a userID po přihlášení

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

Předem se omlouvám pokud to tu někde je. Potřebuji při přihlášení nějak pracovat s daty uživatele, který je přihlášen. Při přihlášení se do Identity ukládá celé jméno, role ve kterých je uživatel. A potřebuji někaj zařídit, abych mohl nastavit nějak userId uživatele do nějaké proměnné abych s ním mohl pracovat.

př. Přihlásím se a chci aby to napsalo kdy sem se naposledy přihlásil a z jaké IP. Všechno okolo uživatelů ukládám do jedné tabulky v databázi. Takže se přihlásím a vrátí mi to položku name a role. A potřebuji nějak získat právě id uživatele abych později mohl z databáze tahat další údaje podle jeho id.

Jde to nějak nebo to budu muset nacpat do getId místo jména?

bojovyletoun
Člen | 667
+
0
-

využil bych onLoggedIn[]/Out[], tam bych navěsil ukládání do Db. Možná by to šlo skloubit s user->identity->data, aby údaje byly po ruce.

kashpi
Člen | 48
+
0
-

to s tím user->identity->data se mi zamlouvá. Jak s tím pracuje?
user->identity->data[promenna]? nebo nějak jinak?

srigi
Nette Blogger | 558
+
0
-

kashpi napsal(a):

to s tím user->identity->data se mi zamlouvá. Jak s tím pracuje?
user->identity->data[promenna]? nebo nějak jinak?

Pracuje sa s tym ako ked do sablony priradzujes vlastne properies:

$this->getUser()->getIdentity()->foo = 'bar';

Ulozena hodnota sa prenasa medzi requestami, takze je to mimoriadne vhodna technika na ulozenie user udajov do Session. Vcera som to pouzil pti pisani ACL tut. – v autetifikatore som si po overeni credentials ulozil do Identity email, plne meno a pod.

Editoval srigi (17. 1. 2011 20:04)

kashpi
Člen | 48
+
0
-

to srigi: dík moc.

tedka jsem narazil na to že to jde udělat i takto

return new Identity($name, $role, array(
        'id' => $id,
        'blabla' => $blabla,
));

takže to využít tak můžu?

Cifro
Člen | 245
+
0
-

Ten parameter $name je ID už neviem od ktorej verzie Nette.

Bazylek
Člen | 22
+
0
-

Začínám a prosil bych radu, pro přístu používam ACL, při authentizaci mam

return new Identity($row->id uzivatele, $roli, $row->jmeno);

pro vypsání v šabloně mám:

Přihlášený jako <strong>{$user->identity->data}</strong> [{? echo implode(', ', user->getRoles())}]

Po přihlášení do administrace
getRoles – vypiše v pořádku admin
zkoušel jsem i getId – také v pořádku vypsalo číslo uživatele.
i jiné možnosti, (getData, foo ..) které jsem nalezl na foru. Bohužel se mi jméno uživatele nevypisuje a vyhazujem mi laděnka chybu :

htmlspecialchars() expects parameter 1 to be string, array given

kdaž jsem změnil na {$user->identity->foo}
Po DUMPU mi to vypsalo

Nette\Security\Identity(4) {
   "id" private => 1
   "roles" private => array(1) [
      0 => "admin" (5)
   ]
   "data" private => array(2) {
      0 => "Web admin" (9)
      "foo" => NULL
   }
   "frozen" private => FALSE
}

Používám Nette Framework 2.0-alpha2 pro PHP 5.3
Nevím si již rady. Děkuji každou pomoc.

kravčo
Člen | 721
+
0
-

Problémom je

<strong>{$user->identity->data}</strong>

Keďže $user->identity->data je pole a šablóna po preložení vyzerá takto:

<strong><?php echo Nette\Templating\DefaultHelpers::escapeHtml($user->identity->data) ?></strong>

pričom escapeHtml v tomto prípade volá htmlspecialchars, čiže je to vlastne:

<strong><?php echo htmlspecialchars($user->identity->data, ENT_QUOTES) ?></strong>

Je fakt, že ta hláška je trochu nezrozumiteľná…

Asi si chcel napísať {$user->identity->data[0]}.

Bazylek
Člen | 22
+
0
-

Moc děkuji za skvělou odpověď, už mi to funguje. Stačilo opravit pole {$user->identity->data[0]}.