Zobrazení username v šabloně

kiCkZ
Člen | 153
+
0
-

Zdravim,

je nějak možné bez tvoření funkce zobrazit info o uživateli (username) v šabloně ?

Díky

ali
Člen | 342
+
+1
-

Identitu uzivatele v sablone mas v promenne $user

kiCkZ
Člen | 153
+
0
-

ali napsal(a):

Identitu uzivatele v sablone mas v promenne $user

Ano to je super, ale potřebuji pouze zobrazit username a to se mi nedaří.
Vím, že proměnná je k tomu $user->getIdentity(), ale jak tam doplním pouze uživatelské jméno ?

CZechBoY
Člen | 3608
+
0
-

Při autentizaci vytváříš identitu.
Třeba v sandboxu ty data pro identitu jsou v $arr
https://github.com/…rManager.php#L62

kiCkZ
Člen | 153
+
0
-

CZechBoY napsal(a):

Při autentizaci vytváříš identitu.
Třeba v sandboxu ty data pro identitu jsou v $arr
https://github.com/…rManager.php#L62

Super, ale jak je tedy mam pak vypsat to potřebuji.
Někdy mi přijde, že místo jasné odpovědi tu mam jen komentáře okolo co jak se dělá.

Moje funkce na autentizaci

public function authenticate(array $credentials): Nette\Security\IIdentity {
    list($username,$password) = $credentials;
    $row = $this->database->table(self::TABLE_NAME)->where(self::COLUMN_NAME,$username)->fetch();

    if(!$row) {
        throw new Nette\Security\AuthenticationException('Uživatel nenalezen');
    } elseif(!password_verify($password, $row['password'])) {
        throw new Nette\Security\AuthenticationException('Špatné heslo.');
    }

    $array = $row->toArray();
    return new Nette\Security\Identity($row[self::COLUMN_ID],$array);
}

Editoval kiCkZ (17. 8. 2017 10:22)

CZechBoY
Člen | 3608
+
0
-

No vypiš to jako bys to vypisoval z toho $array.

$user->getIdentity()->...

Navíc koukám, že ty předáváš to $arr do rolí a ne do dat identity.

Samozřejmě bez konkrétního kusu kodu a struktury databáze nelze konkrétně poradit.

Editoval CZechBoY (17. 8. 2017 10:39)

kiCkZ
Člen | 153
+
0
-

CZechBoY napsal(a):

No vypiš to jako bys to vypisoval z toho $array.

$user->getIdentity()->...

Navíc koukám, že ty předáváš to $arr do rolí a ne do dat identity.

Samozřejmě bez konkrétního kusu kodu a struktury databáze nelze konkrétně poradit.

Nakonec jsem tedy přidal do tohoto řádku username:

return new Nette\Security\Identity($row[self::COLUMN_ID],$row[self::COLUMN_NAME],$array);

A v šabloně jsem to upravil na

$user->getIdentity()->username

Výsledný kód:

public function authenticate(array $credentials): Nette\Security\IIdentity {
     list($username,$password) = $credentials;
     $row = $this->database->table(self::TABLE_NAME)->where(self::COLUMN_NAME,$username)->fetch();

     if(!$row) {
         throw new Nette\Security\AuthenticationException('Uživatel nenalezen');
     } elseif(!password_verify($password, $row['password'])) {
         throw new Nette\Security\AuthenticationException('Špatné heslo.');
     }

     $array = $row->toArray();
     return new Nette\Security\Identity($row[self::COLUMN_ID],$row[self::COLUMN_NAME],$array);
 }

Je to takto v pořádku ?

CZechBoY
Člen | 3608
+
0
-

Nevim jakou máš databázi takže těžko radit.
2. parametr při vytváření Identity je role uživatele (admin/redaktor/čtenář/…).

kiCkZ
Člen | 153
+
0
-

CZechBoY napsal(a):

Nevim jakou máš databázi takže těžko radit.
2. parametr při vytváření Identity je role uživatele (admin/redaktor/čtenář/…).

MySQL s tím, že konkrétně tabulku USERS mam klasicky takto:

ID,username,email,password

CZechBoY
Člen | 3608
+
0
-

Dej do roli aspon prazdne pole a tvuj kod z minuleho prispevku by mel fungovat.

kiCkZ
Člen | 153
+
0
-

CZechBoY napsal(a):

Dej do roli aspon prazdne pole a tvuj kod z minuleho prispevku by mel fungovat.

Díky moc za rady.
Už mi to i tak fungovalo.

CZechBoY
Člen | 3608
+
0
-

jo, tak tys mu dal roli podle username, muze to tak byt, ale pak ma kazdy uzivatel vlastni roli…

nz