Diskuze: Nette - Přihlašování pomocí UserManager.php

PHP Nette Framework Nette framework Nette - Přihlašování pomocí UserManager.php

Avatar
Jan Demel
Redaktor
Avatar
Jan Demel:

Ahoj lidi. Dneska jsem se zase po delší době podíval na Nette že se naučím něco nového. Trochu jsem ale narazil. Díval jsem se na tutoriály na Nette.org, ale pořád to nemám dobře. Snažím se o přihlášení uživatele za pomocí databáze, ale když vyplním správně username i password tak mi to vyhodí tuto chybu (viz. níže). Třídu UserManager jsem si trochu poupravil tak to bude možná tím. Přikládám i snímek jak vypadá moje tabulka users v databázi a zdrojový kód funkce authenticate třídy UserManager. Budu velice vděčný, kdyby jste mi poradili jak na to. Předem moc děkuju :)

public function authenticate(array $credentials)
        {
                list($username, $password) = $credentials;

                $row = $this->database->table('users')->where('username', $username)->fetch();

                if (!$row) {
                        throw new Nette\Security\AuthenticationException('The username is incorrect.');

                } elseif (Passwords::verify($password, $row->password)) {
                        throw new Nette\Security\AuthenticationException('The password is incorrect.');

                }

                return new Nette\Security\Identity($row->id, $row->role);
        }

Databáze: http://oi58.tinypic.com/23w8bdg.jpg

Odpovědět 19.7.2014 12:28
To co se zdá být nemožné, je vždy možné.
Avatar
Odpovídá na Jan Demel
Martin Konečný (pavelco1998):

Ahoj,

napadá mě, zkus promazat cache Nette\Database.

Btw, za slovem viz není tečka - nejedná se o zkratku, ale o rozkazovací způsob slova vidět :-)

 
Nahoru Odpovědět  +1 19.7.2014 13:18
Avatar
Jan Demel
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Jan Demel:

Nepomohlo :/ Jo a děkuju za poučení :D

Nahoru Odpovědět 19.7.2014 14:05
To co se zdá být nemožné, je vždy možné.
Avatar
Odpovídá na Jan Demel
Martin Konečný (pavelco1998):

Hmm, tak to ti asi neporadím. :-(
Spíš se zkus zeptat přímo na fóru Nette, tam je mnohem větší šance než tady, že ti někdo poradí.

 
Nahoru Odpovědět 19.7.2014 14:22
Avatar
Jan Demel
Redaktor
Avatar
Jan Demel:

Kdyby tady ještě někdo řešil podobnou věc tak tu pošlu jak jsem to vyřešil. Celou tu metodu jsem přepsal takto.

public function authenticate(array $credentials)
        {
                list($username, $password) = $credentials;

                $row = $this->database->table('users')->where('username', $username)->fetch();

                if (!$row) {
                        throw new Nette\Security\AuthenticationException('The username is incorrect.');

                } else if ($password != $row->password) {
                        throw new Nette\Security\AuthenticationException('The password is incorrect.');
                }

                $arr = $row->toArray();
                //unset($row['password']);

                return new Nette\Security\Identity($row['id'], $row['role'], $arr, $row['username']);
        }

EDIT: do Identity vracím taky Username, který ale základní konstruktor Identity neobsahuje. Musíte si ho když tak připsat.

Editováno 19.7.2014 20:22
Nahoru Odpovědět 19.7.2014 20:21
To co se zdá být nemožné, je vždy možné.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.