Diskuze: Nette: form EQUAL a password z databazy

Člen

Zobrazeno 13 zpráv z 13.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Nedělám tolik do php, ale předpokládám, že
$form->addPassword('pass', 'Vase heslo:')
->setRequired('Napiste vase heslo')
->addRule(Form::EQUAL, 'Heslo sa nezhoduje',md5($post->password));
by mělo stačit.
Heslo se přece z databáze nikdy nevytahuje ani ve formě MD5.
Túto máš jednoduchý príklad + návod ako sa to v Nette rieši: http://doc.nette.org/…thentication
//Píšem ako anonym pretože keď som prihlásený tak mi nejde kliknúť na tlačítko odoslať (iba pri tomto príspevku), netuším prečo
Prepacte nenapadlo mi ze nette patri do sekcie PHP...:[
Jak říká Kit, hesla z databáze netahej. Předpokládám, že děláš přihlašování. Jednoduše si pošli dotaz na databázi s hashovaným heslem v podmínce WHERE:
SELECT id, username FROM users WHERE password = ? AND username = ?
Data, co ti to vrátí, si můžeš uložit do session jako identitu.
Zatím jsem nepochpil, k čemu Nette vlastně je, takže víc neporadím. Pro porovnávání se používají dotazy viz Drahomír Hanák , ale jak se to napasuje do Nette, netuším.
Nerobim prihlasovanie ale formular na zmenu hesla cize form:
a v tom forme sa volako snazim dat podmienku aby ze stare heslo z formu rovnalo s heslom v databeze
V databaze mam hesla ulozene v md5 takze ked to teraz porovnam tak priklad
ked je heslo "nbu1234" tak to porovnava
"nbu1234" <> "d41d8cd98f00b204e9800998ecf8427e"
este tomu nette nerozumiem... urcite sa to da dako lahko...
Tohle vyřeší databáze. SQL:
UPDATE users SET password = ? WHERE password = ? AND username = ?
Pro Nette Databse to bude vypadat nějak takto:
$connection
->table('users')
->where(array('password' => $oldPsw, 'username' => $username))
->update(array('password' => $newPsw));
Pokud používáš příklad z Nette Quick Startu, tak si vytvoř metodu ve třídě UsersRepository na změnu hesla (např. 'changePassword'), ve které místo $connection->table('users') budeš mít jen $this->getTable() a zbytek bude stejný. (pozor na verzi: Connection je ve verzích 2.x objekt typu Nette\Database\Connection v 2.1 Nette\Database\Context)
K tvé otázce s formuláři. Příklad, co jsem ti poslal, vrací počet ovlivněných řádek. Pokud bude výsledek 0 (ovlivněných řádek), v presenteru zavoláš $this->flashMessage('Toto není vaše staré heslo. Prosím, zkuste to znovu', 'error'), jinak mu stejným způsobem vypíšeš zprávu o úspěšné změně hesla.
Nette je framework napsaný v PHP. Na další otázky bude tedy lepší založit v sekci PHP nové vlákno a jako první slovo nadpisu napsat "Nette" kvůli snadné orientaci.
Jen se asi budeš muset spokojit s tím, že kvalita odpovědí bude pravděpodobně nižší, než ve specializovaném fóru.
Zobrazeno 13 zpráv z 13.