Přihlašování a Nette\Security\AuthenticationException #2

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

Ahoj,
zkouším rozjet přihlašování podle jednoho z příkladů, který je tu uveden na ofic. stránce. Implementuju toto přihlašování ve verzi PHP 5.3 a řeším následující problém:

namespace Proj\Security;

use Nette\Object;
use Nette\Environment;
use Nette\Security\IAuthenticator;
use Nette\Security\Identity;
use Nette\Security\AuthenticationException;


class Authenticator extends Object implements IAuthenticator
{
    public function authenticate(array $credentials)
    {
        $login = $credentials[self::USERNAME];
        $row = \UserModel::getByEmail($login);

        if (!$row) {
            throw new AuthenticationException("Užívateľ s registračným emailom '$login' sa nenašiel!", self::IDENTITY_NOT_FOUND);
        }

        $config = Environment::getConfig('security');
        $password =  hash_hmac('sha256', $credentials[self::PASSWORD] . $row->salt , $config->hmacKey);

        if ($row->password !== $password) {
            throw new AuthenticationException("Zadali ste nesprávne heslo!", self::INVALID_CREDENTIAL);
        }

        return new Identity($row->name, $row->role);
    }
}

Při pokusu o přihlášení dostanu chybové hlášení „Nette\Security\AuthenticationException #2“ se zprávou „Zadali ste nesprávne heslo!“. Heslo jsem zadal určitě správné. Toto chybové hlášení mi vyskočí vždy o pokusu o přihlášení (je jedno, ať zadám přihlašovací údaje správné či špatné).
Laděnka mi ukazuje na následující kousek kódu:

Line 26:            if ($row->password !== $password) {
Line 27:                throw new AuthenticationException("Zadali ste nesprávne heslo!", self::INVALID_CREDENTIAL);
Line 28:            }

Asi mi nějaká podstata uniká, protože jsem si myslel, že přidáním komponenty „AuthenticationException“ se problém vyřeší, ale bohužel ne

EDIT: ještě si uvědomuji – zkusil jsem si do databáze uložit heslo bez zaheshování, zakomentoval jsem řádek, kde se uživatelem zadané heslo hashuje a při zadání správného hesla jsem se přihlásil (při zadání špatného hesla opět ona chybová hláška) – tak mě napadá, jestli nemůže být problém s hashováním toho hesla a náísledným porovnáváním

Editoval Manny7 (27. 7. 2010 20:33)

blacksun
Člen | 177
+
0
-

Tak si dumpni, co máš v proměnné $row ve sloupci password a jak se ti heslo zahashuje a zkus zjistit, kde se děje rozdíl.. Jestli do databáze to heslo ukládáš zahashované, tak jak se hashuje (mělo by stejně), jaká je sůl atp..

Nejedná se určitě o problém Nette..