IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Nette: form EQUAL a password z databazy

Aktivity
Avatar
byzanth25
Člen
Avatar
byzanth25:12.12.2013 19:48

Zdravim,

ospravedlnujem sa ak to nepatri sem, ale pevne verim ze mi budete snad vediet poradit.

Ide o to mam formular na overenie zhodnosti hesla uzivatela:

$form->addPassword('pas­s', 'Vase heslo:')
->setRequired('Na­piste vase heslo')
->addRule(Form::E­QUAL, 'Heslo sa nezhoduje',$post->password);

len neviem ako napisat addRule aby hodnota na strane formu bola v md5 (kedze z databazy mam heslo v md5)

Dufam ze som to napisal aspon trocha zrozumitelne.

 
Odpovědět
12.12.2013 19:48
Avatar
Odpovídá na byzanth25
Neaktivní uživatel:12.12.2013 19:50

Přesunuto do sekce PHP :)

Nahoru Odpovědět
12.12.2013 19:50
Neaktivní uživatelský účet
Avatar
Odpovídá na byzanth25
Neaktivní uživatel:12.12.2013 19:52

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.

Nahoru Odpovědět
12.12.2013 19:52
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na byzanth25
Kit:12.12.2013 20:13

Heslo se přece z databáze nikdy nevytahuje ani ve formě MD5.

Nahoru Odpovědět
12.12.2013 20:13
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Juraj
Neregistrovaný
Avatar
Juraj:12.12.2013 20:20

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

 
Nahoru Odpovědět
12.12.2013 20:20
Avatar
byzanth25
Člen
Avatar
byzanth25:12.12.2013 20:27

Prepacte nenapadlo mi ze nette patri do sekcie PHP...:[

  • takto heslo je v databaze uz vo forme md5 cize to co napisal Funebrak nieje potrebne. Ale hodnota vo forme nie a tu neviem previest...
  • to Kit: hmm tak to potom budem musiet vymysliet inak, len zatial neviem ako...
 
Nahoru Odpovědět
12.12.2013 20:27
Avatar
Odpovídá na byzanth25
Drahomír Hanák:12.12.2013 20:30

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.

Editováno 12.12.2013 20:31
 
Nahoru Odpovědět
12.12.2013 20:30
Avatar
Kit
Tvůrce
Avatar
Odpovídá na byzanth25
Kit:12.12.2013 20:39

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.

Nahoru Odpovědět
12.12.2013 20:39
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
byzanth25
Člen
Avatar
byzanth25:12.12.2013 21:00

Nerobim prihlasovanie ale formular na zmenu hesla cize form:

  • stare heslo
  • nove heslo
  • znova nove heslo

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" <> "d41d8cd98f00­b204e9800998ec­f8427e"

este tomu nette nerozumiem... urcite sa to da dako lahko...

 
Nahoru Odpovědět
12.12.2013 21:00
Avatar
Odpovídá na byzanth25
Drahomír Hanák:12.12.2013 21:34

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\Con­nection v 2.1 Nette\Database\Con­text)

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.

Editováno 12.12.2013 21:36
 
Nahoru Odpovědět
12.12.2013 21:34
Avatar
byzanth25
Člen
Avatar
byzanth25:12.12.2013 21:42

skusim dakujem :)

 
Nahoru Odpovědět
12.12.2013 21:42
Avatar
byzanth25
Člen
Avatar
byzanth25:14.12.2013 11:30

Chcem sa spytat ci by vam nevadilo keby som smeroval svoje otazky ohladom nette do tohto vlakna? Viem nette ma svoje vlastne forum ale devbook je mi sympatickejsi... :[

 
Nahoru Odpovědět
14.12.2013 11:30
Avatar
Kit
Tvůrce
Avatar
Odpovídá na byzanth25
Kit:14.12.2013 11:35

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.

Nahoru Odpovědět
14.12.2013 11:35
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
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 13 zpráv z 13.