Diskuze: Nette: form EQUAL a password z databazy

PHP Nette Framework Nette framework Nette: form EQUAL a password z databazy

Avatar
byzanth25
Člen
Avatar
byzanth25:

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
Jiří Gracík
Redaktor
Avatar
Nahoru Odpovědět  +1 12.12.2013 19:50
Creating websites is awesome till you see the result in another browser ...
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na byzanth25
Jiří Gracík:

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
Creating websites is awesome till you see the result in another browser ...
Avatar
Kit
Redaktor
Avatar
Odpovídá na byzanth25
Kit:

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:

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:

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
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na byzanth25
Drahomír Hanák:

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  +1 12.12.2013 20:30
Avatar
Kit
Redaktor
Avatar
Odpovídá na byzanth25
Kit:

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:

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
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na byzanth25
Drahomír Hanák:

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  +2 12.12.2013 21:34
Avatar
byzanth25
Člen
Avatar
byzanth25:

skusim dakujem :)

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

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
Redaktor
Avatar
Odpovídá na byzanth25
Kit:

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.