сохранить ввод пароля как sha1 () в db с помощью symfony - PullRequest
1 голос
/ 09 августа 2011

Я ломаю голову над самыми простыми вещами.

У меня есть сгенерированная Symfony форма с некоторыми настройками.У меня отлично сохраняется сохранение формы, за исключением того, что в поле «пароль» записывается пароль (как и ожидалось) в обычном формате.

Как я могу перехватить это значение перед вводом в базу данных и sha1 () перед записью?

Код по существу:

$this->dialog = $request->getParameter('dialog');
$this->form = new UserForm();

if ($this->getRequest()->getMethod() == "POST") {
    $this->form->bind($request->getParameter('user'));
    // intercept here, I suspect
    $user = $this->form->save();
}

РЕДАКТИРОВАТЬ: проблема решена.

в / lib / model / User.php

класс Пользователь расширяет BaseUser {

public function save(PropelPDO $con = null)
{

  if ($this->getPassword() != '')
  {
    $this->setPassword(sha1($this->getPassword()));
  }

  return parent::save($con);
}

}

Это довольно очевидно, но не для такого нуба, как я.надеюсь, это поможет кому-то еще.Если есть лучший способ сделать это без расширения функции save (), дайте мне знать?

Ресурс: http://www.symfony -project.org / jobeet / 1_4 / Propel / en / 10.модель

public function setPassword($rawPassword) 
{ 
    $salt = "fgv932g2e9dshdfkdjgf927gf8hlz082";
    $password = sha1($salt . $rawPassword); 
    parent::setPassword($password);
}

1 Ответ

4 голосов
/ 09 августа 2011

«Лучше» переопределить функцию setPassword() на User модели.

как то так:

public function setPassword($rawPassword, $algo = 'sha1', $salt = null) {
  if ($salt === null) {
     $salt = sha1(time().rand().$this->id.$this->username);
  }
  $password = hash($algo, $rawPassword.$salt);
  $this->_set('password', $password);
  $this->_set('password_algo', $algo);
  $this->_set('password_salt', $salt);
}

Таким образом, вы можете установить пароль отовсюду (ваше текущее решение работает только для новых пользователей).

(И, на заметку: не забудьте подсолить ваш пароль. :-))

...