autorizace zalozeni usera

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

ahoj tak jsem si zacal tvorit aplikaci, zvesela si tak busim formulare, rikam si jak mi to krasne jde a pak delam form na zmenu hesla a zaboha nevim jak to v te sve modularni aplikaci udelat, pouzil jsem navod na modularni aplikaci s administracnim modulem, coz o to, ale nejak se to tam overuje vuci nahodnemu stringu a hashi, ci co nejak jsem to nepobral, vysvetlite mi to?

Pripadne ukazka jak udelat zmenu hesla zadaneho uzivatelem? Diky moc Ales

toka
Člen | 253
+
0
-

Situace není popsaná dost dobře, ale snad jsem ji porozuměl. Pokusím se o takový náznak, z hlavy – takže takový nástin (něco jsem tu poskládal :-)), nezkoušeno:

// ---------------------------------------------------------------------------
protected function createComponentFormPassword() {
  $form = new AppForm;

  $form->addPassword('current_password', 'Staré heslo:')
       ->addRule(Form::FILLED, 'Zadejte staré heslo');

  $form->addPassword('new_password', 'Nové heslo:')
       ->addRule(Form::FILLED, 'Zadejte nové heslo')
       ->addRule(Form::MIN_LENGTH, 'Zadané heslo je příliš krátké, zvolte si heslo alespoň o %d znacích', 8);

  $form->addPassword('new_password2', 'Nové heslo (ověření):')
        ->addRule(Form::FILLED, 'Zadejte nové heslo ještě jednou, pro kontrolu')
        ->addRule(Form::EQUAL, 'Zadané hesla se neshodují', $form['new_password']);

  $form->addSubmit('submitted', 'Změnit heslo');
  $form->onSubmit[] = array($this, 'formPasswordSubmitted');

  return $form;
}
// ---------------------------------------------------------------------------
public function formPasswordSubmitted($form) {
  ...
  if($return = $this->model->updatePassword($formValues)) {
    $this->flashMessage('Heslo bylo změněno', 'success');
    $this->redirect(':IS:Settings:password');
  } else {
    if($return == -1) $this->flashMessage('Zadané heslo není správné', 'error');
    else $this->flashMessage('Heslo se nepodařilo změnit', 'error');
  }
  ...
}
// ---------------------------------------------------------------------------
  public function getPassword($login) {
    $r = $this->db->select('[uzivatel].[heslo]')
                  ->from('[uzivatel]')
                  ->where('[uzivatel].[login]=%s', $login)
                  ->fetch();

    return $r['heslo'];
  }

  // ---------------------------------------------------------------------------
  public function updatePassword($vals) {
    $r = TRUE;

    $password = $this->getPassword(Environment::getUser()->getIdentity()->getName());

    if($password == hash('sha256', $vals['current_password'])) {


      $uzivatel = array(
        'heslo' => hash('sha256', $vals['new_password']),
      );

      if(!$this->db->query('UPDATE [uzivatel] SET ', $uzivatel, ' WHERE [login] = %s', Environment::getUser()->getIdentity()->getName())) $r &= FALSE;

      return $r;
    } else {
      return -1;
    }
  }

Snad to je pochopitelné, v případě, že používáš jinou hashovací funkci, tak si to v kódu uprav.

Editoval toka (5. 5. 2010 11:10)

dotTwelve
Člen | 167
+
0
-

Používá se funkce z php – hash_hmac a to tak, že se naplní potřebnými údaji ;-)

Ja tu funkci plním ve formuláři na resetování původního hesla například takto:

<?php
$config = Environment::getConfig('security');
$password = $this->random(6);
$values['salt'] = $this->random(10);
$values['password'] = hash_hmac('sha256', $password . $values['salt'], $config->hmacKey);
?>

kde hmac-klíč načítám z konfiguračního souboru config.ini security.hmacKey = tadySiZvolíšKlíčJakýChceš, dále mám napsanou funkci, která mi generuje náhodný string jako heslo a to heslo ještě pro jistotu osolíš nějakým dalším stringem, který taky náhodně generuju.

Jo a pokud to chceš nechat na uživateli změnu hesla, tak holt budeš mít proměnnou $password vytaženou z formuláře.

Editoval dotTwelve (5. 5. 2010 15:19)

srigi
Nette Blogger | 558
+
0
-

nj, ktosi mi pisal v jabber room, ci to s tou bezpecnostou neprehanam, ked som do tutorialu pridal „dvojite solenie“. Neviem. Kazdopadne tut je urceny pre pokrocilych userov, ktori si vedia kod prisposobit.

dotTwelve
Člen | 167
+
0
-

Myslím, že naškodu jsou jiné věci než-li bezpečnost. V mém případě se to uživatele ani nedotkne a jeden řádek navíc? Che, no bože ;)