Vyplnění hesel ve formuláři po neúspěšné PHP validaci

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

Mám velice jednoduchý formulář a funkce nickValidator mi zjistí, zda je daná přezdívka používaná či ne. Problém nastane když uživatel odešle formulář (vše má vyplněné správně) a přezdívka není volná, pak se nastaví výchozí hodnoty u všech prvků formuláře správně a jen u hesel se nevyplní nic. Možná je to nerozumné ale i tak bych rád kdyby v takovém případě uživatel pouze změnil přezdívku a mohl kliknout na submit a nemusel znovu zadávat heslo. Jak toho docílit?

  protected function createComponentSignInForm()
  {
    $this->form = new AppForm;
    $form = $this->form;

    $form->addText('nick', 'Username:')
      ->addRule(Form::FILLED, 'Please fill the username field.')
      ->addRule(array($this, 'nickValidator'), 'The username was chosen by another user.')
      ->getControlPrototype()->class('required');
    $form->addPassword('pass', 'Password:')
      ->addRule(Form::FILLED, 'Please fill the password field.')
      ->addRule(Form::MIN_LENGTH, 'The password is too short. Minimal length is %d characters.', 5)
      ->getControlPrototype()->class('required');
    $form->addPassword('pass2', 'Re-type password:')
      ->addRule(Form::FILLED, 'Re-type your password again.')
      ->addRule(Form::EQUAL, 'Passwords are not the same.', $form['pass'])
      ->getControlPrototype()->class('required');
    $form->addSubmit('ok', 'Send')
        ->onClick[] = array($this, 'okClicked');
    $form->addSubmit('cancel', 'Cancel')
        ->setValidationScope(FALSE) // prvek se nebude validovat
        ->onClick[] = array($this, 'cancelClicked');

    return $form;
  }

redhead
Člen | 1313
+
0
-

Toto je bezpečnostní řešení a není to chyba, už vůbec ne v Nette, ale obecně. Na všech stránkách to takhle funguje a neznám jedinou, kde by heslo mohlo být předvyplněno. Jediným řešením je kontrolovat username ajaxově během vyplňování formuláře a neodesílat kvůli tomu formulář a načítat znovu stránku.

despiq
Člen | 320
+
0
-

nebo muzes vytvorit bezpecnostni diru a nechat password jako type text
a to je samozrejme ta nejhorsi mozna cesta kterou zadnej rozumnej clovek nepujde

Foowie
Člen | 269
+
0
-

… nebo pomocí hidden pole si udělat úložiště a před/po requestu to pomocí JS do password fieldu uložit/načíst

Ale jako nejrozumnější mi příjde, jak psal redhead, ajaxová kontrola username.

Editoval Foowie (11. 4. 2010 12:50)

MartyIX
Člen | 217
+
0
-

redhead: Foowie: Ajax mam v planu. Vim, ze po jeho pouziti bude ten problem jen okrajovym pripadem, ale stejne me to zajimalo ;-)

despiq: type=text pouzit nechci, to je moc brutalni :)